starcross/actions.zil
2019-04-13 22:26:27 -04:00

4266 lines
138 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"ACTIONS for
Interlogic SF Game
(c) Copyright 1981,1982 Infocom, Inc. All Rights Reserved
"
<GLOBAL ALARM? T>
<ROUTINE BRIDGE-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"This is the control room of the Starcross. There are exits labelled
(arbitrarily) \"Port,\" \"Starboard,\" and \"Out.\" The latter exit has
a heavy bulkhead which is " <COND (<FSET? ,AIRLOCK-INNER ,OPENBIT>
"open.")
(T "closed.")>>
<CRLF>
<TELL
"Your ship's computer takes care of all the routine tasks of
navigation and life support. A control couch is in the front end of the
room, surrounded by controls and fronting a large viewport. The ship's
registration is affixed nearby." CR>
<TELL
"Your mass detector, essential in the search for black holes, sits to one
side. On the detector are a red button, a blue button, and a small screen
on which something is displayed." CR>)>>
<ROUTINE DETECTOR-FCN ()
<COND (<VERB? EXAMINE READ>
<TELL "The display reads: \"">
<PRINTD ,MASS>
<TELL ".\"" CR>)>>
<GLOBAL MASS <>>
<GLOBAL MASSNUM <>>
<ROUTINE I-ALARM ("AUX" (HEAR? <>))
<COND (,ALARM?
<COND (<NOT ,MASS>
<SETG MASSNUM <RANDOM 8>>
<SETG MASS <GET ,MASSES ,MASSNUM>>)>
<ENABLE <QUEUE I-ALARM 1>>
<COND (<EQUAL? ,HERE ,SPACESHIP-BRIDGE
,SPACESHIP-QUARTERS ,SPACESHIP-STORES>
<SET HEAR? T>)
(<AND <==? ,HERE ,SPACESHIP-AIRLOCK>
<FSET? ,AIRLOCK-INNER ,OPENBIT>>
<SET HEAR? T>)>
<COND (.HEAR?
<TELL
"The alarm bell on the mass detector is ringing stridently." CR>)>
<COND (<==? ,MOVES 15>
<SETG ALARM? <>>
<SETG COMPUTER-ON T>
<COND (.HEAR?
<TELL
"\"If you won't turn it off, I will. I can't take that noise any more.\"" CR>)>)
(<AND .HEAR? <==? ,MOVES 10>>
<SETG COMPUTER-ON T>
<TELL
"A somewhat expressionless but nonetheless surly voice issues from
the computer: \"Will you please turn that alarm off? We'll both have
headaches if you don't.\"" CR>)>
<RTRUE>)>>
<ROUTINE ALARM-FCN ()
<COND (<VERB? LISTEN>
<TELL "The alarm is ">
<COND (,ALARM? <TELL "ringing.">)(T <TELL "off.">)>
<CRLF>)
(<NOT <==? ,HERE ,SPACESHIP-BRIDGE>>
<TELL "The alarm is on the bridge, not here." CR>)
(<VERB? EXAMINE>
<TELL "The alarm is ">
<COND (,ALARM? <TELL "ringing.">)(T <TELL "off.">)>
<CRLF>)
(<VERB? LAMP-OFF PUSH>
<COND (,ALARM?
<SETG ALARM? <>>
<TELL
"The alarm goes silent." CR>)
(T
<TELL
"The alarm's already off. Your ears must be ringing." CR>)>)
(<VERB? LAMP-ON>
<TELL
"Only the mass detector can turn the alarm on." CR>)>>
<ROUTINE MASS-FCN ()
<COND (<VERB? SET>
<COND (<KVETCH> <RTRUE>)
(ELSE
<TELL
"The computer must be used to set courses, as navigation is fully
automated." CR>)>)
(<VERB? EXAMINE>
<COND (<HELD? ,CHART>
<TELL
"It's still here on the output." CR>)
(ELSE <TELL "You don't have the output." CR>)>)>>
<ROUTINE BUNK-FCN ("OPTIONAL" (RARG <>))
<COND (<AND <==? .RARG ,M-BEG>
<VERB? WALK>
<IN? ,ADVENTURER ,BUNK>>
<TELL "You must get up first!" CR>)>>
<ROUTINE BUTTON-FCN ()
<COND (<VERB? PUSH>
<COND (<FSET? ,CHART ,TOUCHBIT>
<TELL "Nothing happens." CR>)
(T
<MOVE ,CHART ,HERE>
<FSET ,CHART ,TOUCHBIT>
<TELL
"The mass detector produces some output." CR>)>)>>
<ROUTINE V-R ()
<COND (<==? ,WINNER ,COMPUTER>
<COND (<==? ,PRSO ,INTNUM>
<COND (<OR <0? ,P-NUMBER> <G? ,P-NUMBER 360>>
<NOT-IN-RANGE "R">
<RTRUE>)
(T <OK-TELL ,R-VALUE "R">)>
<SETG R-VALUE ,P-NUMBER>
<COURSE-SET>)
(T <NON-NUMERIC "R">)>)
(ELSE
<EXPLAIN-COORDINATES>)>>
<ROUTINE V-THETA ()
<COND (<==? ,WINNER ,COMPUTER>
<COND (<==? ,PRSO ,INTNUM>
<COND (<OR <0? ,P-NUMBER> <G? ,P-NUMBER 360>>
<NOT-IN-RANGE "theta">
<RTRUE>)
(T <OK-TELL ,THETA-VALUE "Theta">)>
<SETG THETA-VALUE ,P-NUMBER>
<COURSE-SET>)
(T <NON-NUMERIC "theta">)>)
(ELSE <EXPLAIN-COORDINATES>)>>
<ROUTINE V-PHI ()
<COND (<==? ,WINNER ,COMPUTER>
<COND (<==? ,PRSO ,INTNUM>
<COND (<OR <0? ,P-NUMBER> <G? ,P-NUMBER 360>>
<NOT-IN-RANGE "phi">
<RTRUE>)
(T <OK-TELL ,PHI-VALUE "Phi">)>
<SETG PHI-VALUE ,P-NUMBER>
<COURSE-SET>)
(T <NON-NUMERIC "phi">)>)
(ELSE <EXPLAIN-COORDINATES>)>>
<ROUTINE OK-TELL (VAL STR)
<TELL "\"">
<COND (.VAL
<TELL "Changing your mind, eh? ">)>
<TELL .STR " set.">>
<ROUTINE NOT-IN-RANGE (STR)
<TELL
"\"That value for " .STR " is out of range.\"" CR>>
<ROUTINE NON-NUMERIC (STR)
<TELL
"\"You must give me a numerical value for " .STR ".\"" CR>>
<ROUTINE EXPLAIN-COORDINATES ()
<COND (<KVETCH> <RTRUE>)
(ELSE
<TELL
"You must set a course by telling the computer the appropriate R, theta,
and phi values of your destination." CR>)>>
<ROUTINE KVETCH ()
<SETG COMPUTER-COUNT <+ ,COMPUTER-COUNT 1>>
<COND (<==? ,COMPUTER-COUNT 3>
<SETG COMPUTER-COUNT 0>
<TELL
"Please consult your manual for the correct operating procedure for the
computer." CR>)>>
<GLOBAL R-VALUE <>>
<GLOBAL THETA-VALUE <>>
<GLOBAL PHI-VALUE <>>
<GLOBAL COMPUTER-COUNT 0>
<ROUTINE COURSE-SET ()
<COND (<AND ,R-VALUE ,THETA-VALUE ,PHI-VALUE>
<SETG GOT-INSTRUCTIONS T>
<SETG DESTINATION <>>
<SETG LOST <>>
<TELL
"\" Lights blink furiously for a few moments. The computer speaks: ">
<SETG GIVE-UP <FIND-DESTINATION ,KNOWN-LOCS ,KNOWNS>>
<COND (,GIVE-UP
<TELL
"\"Navigational program for " D ,GIVE-UP " is programmed and ready. Giving up,
huh? Figures, just when we get a good strike. ">)
(<AND <SETG DESTINATION
<FIND-DESTINATION ,MASS-LOCS ,MASSES>>
<==? ,DESTINATION ,MASS>>
<TELL
"\"Navigational program for intercept of mass concentration is
programmed and ready. ">)
(ELSE
<SETG LOST T>
<TELL
"\"I know my instruments aren't as good as the mass detector, but I don't
show anything at that location. Well, if you say so. ">)>
<TELL "Please confirm new navigational
program. I'm waiting...\"" CR>)
(T <TELL " Waiting for additional values.\"" CR>)>>
<GLOBAL GIVE-UP <>>
<GLOBAL LOST <>>
<GLOBAL DESTINATION <>>
<GLOBAL GOT-INSTRUCTIONS <>>
<GLOBAL COUNTDOWN <>>
<ROUTINE FIND-DESTINATION (X M "AUX" (C 0) (N <GET .X 0>))
<REPEAT ()
<SET C <+ .C 1>>
<COND (<AND <==? <GET .X 1> ,R-VALUE>
<==? <GET .X 2> ,THETA-VALUE>
<==? <GET .X 3> ,PHI-VALUE>>
<RETURN <GET .M .C>>)>
<COND (<==? .C .N> <RETURN <>>)>
<SET X <REST .X 6>>>>
<ROUTINE KNOWN-COURSE (D SET? "AUX" X N (C 0))
<SET X ,KNOWN-LOCS>
<SET N <GET .X 0>>
<REPEAT ()
<SET C <+ .C 1>>
<COND (<==? <GET ,KNOWNS .C> .D>
<COND (.SET?
<SETG R-VALUE <GET .X 1>>
<SETG THETA-VALUE <GET .X 2>>
<SETG PHI-VALUE <GET .X 3>>
<RETURN .D>)
(ELSE <RETURN .X>)>)>
<COND (<==? .C .N> <RETURN <>>)>
<SET X <REST .X 6>>>>
;<ROUTINE V-CHEAT ("AUX" (N <+ 1 <* 3 <- ,MASSNUM 1>>>))
<COND (,MASS
<REPORT-LOCATION ,MASS ,MASS-LOCS .N>)
(ELSE <TELL "Now, now, don't anticipate..." CR>)>>
<ROUTINE REPORT-LOCATION (M ML N)
<TELL "\"Coordinates for " D .M
": R is " N <GET .ML .N>
", theta is " N <GET .ML <+ .N 1>>
", phi is " N <GET .ML <+ .N 2>>
".\""
CR>>
<ROUTINE CONTROLS-FCN ()
<COND (<==? ,HERE ,THRONE-ROOM>
<COND (<VERB? EXAMINE> <AS-ADVERTISED>)
(T <TELL
"The controls look in no way operational." CR>)>)
(<VERB? EXAMINE>
<TELL
"This is the standard control panel for this class of single-passenger
mining survey ship. Most controls are for emergencies only, as
the Starcross is normally controlled by verbal instructions to the
computer.">
<COND (<NOT <IN? ,COMPUTER ,HERE>>
<TELL " This set of controls is non-functional.">)>
<CRLF>
<RTRUE>)
(<VERB? RUB SET LAMP-ON LAMP-OFF PLAY>
<COND (<NOT <IN? ,COMPUTER ,HERE>>
<TELL
"The controls are no longer functional." CR>)
(,COMPUTER-ON
<COND (,GOT-INSTRUCTIONS
<TELL
"As you reach for the controls, the computer blares: \"Warning! Warning!
Course is set! Remember what happened last time you played with the controls
in mid-course...\"" CR>)
(ELSE
<TELL
"The computer's voice intrudes. \"Are you sure you want to touch the
controls just now? I don't want to impugn your piloting ability, but
wouldn't you rather have me execute any course corrections? I'm very
good at it, you know.\"" CR>)>)
(ELSE
<SETG COMPUTER-ON T>
<TELL
"The computer comes on and chides, \"Manual operation when the ship's
computer is functional is not recommended. Ship's controls are not
currently enabled.\"" CR>)>)>>
<ROUTINE BRIDGE-EXITS ()
<COND (<==? ,PRSO ,P?WEST> ,SPACESHIP-QUARTERS)
(<==? ,PRSO ,P?EAST> ,SPACESHIP-STORES)
(<EQUAL? ,PRSO ,P?OUT ,P?SOUTH>
<COND (<FSET? ,AIRLOCK-INNER ,OPENBIT> ,SPACESHIP-AIRLOCK)
(T <ITS-CLOSED ,AIRLOCK-INNER>)>)>>
<ROUTINE OPEN-CLOSE (OBJ STROPN STRCLS)
#DECL ((OBJ) OBJECT (STROPN STRCLS) STRING)
<COND (<VERB? OPEN>
<COND (<FSET? .OBJ ,OPENBIT>
<TELL <PICK-ONE ,DUMMY>>)
(ELSE
<TELL .STROPN>
<FSET .OBJ ,OPENBIT>)>
<CRLF>)
(<VERB? CLOSE>
<COND (<FSET? .OBJ ,OPENBIT>
<TELL .STRCLS>
<FCLEAR .OBJ ,OPENBIT>
T)
(ELSE <TELL <PICK-ONE ,DUMMY> CR>)>
<CRLF>)>>
<GLOBAL DUMMY
<LTABLE "Look around."
"You think it isn't?"
"I think you've already done that.">>
<ROUTINE OBJECT-PSEUDO ()
<COND (<VERB? EXAMINE>
<PERFORM ,V?LOOK-INSIDE ,WINDOW>
<RTRUE>)>>
<ROUTINE PORTHOLE-FCN ()
<COND (<VERB? LOOK-INSIDE EXAMINE>
<COND (<==? ,HERE ,SPACESHIP-BRIDGE>
<DESCRIBE-SPACE>)
(<==? ,HERE ,THRONE-ROOM>
<TELL
"You see the green dock, and the stars wheeling by above." CR>)>)>>
<ROUTINE V-THROUGH ("OPTIONAL" (OBJ <>) "AUX" M)
#DECL ((OBJ) <OR OBJECT FALSE> (M) <PRIMTYPE VECTOR>)
<COND (<AND <NOT .OBJ> <FSET? ,PRSO ,VEHBIT>>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<AND <NOT .OBJ> <NOT <FSET? ,PRSO ,TAKEBIT>>>
<TELL "You hit your head against the "
D ,PRSO
" as you attempt this feat." CR>)
(.OBJ <TELL "You can't do that!" CR>)
(<IN? ,PRSO ,WINNER>
<TELL "That would involve quite a contortion!" CR>)
(ELSE <TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE ROOM? (OBJ "AUX" NOBJ)
<REPEAT ()
<SET NOBJ <LOC .OBJ>>
<COND (<NOT .NOBJ> <RFALSE>)
(<==? .NOBJ ,WINNER> <RFALSE>)
(<==? .NOBJ ,ROOMS> <RETURN .OBJ>)>
<SET OBJ .NOBJ>>>
<ROUTINE GRUE-FUNCTION ()
<COND (<VERB? EXAMINE>
<TELL
"The grue is a sinister, lurking presence in the dark places of the
earth. Its favorite diet is spacers, but its insatiable
appetite is tempered by its fear of light. No grue has ever been
seen by the light of day, and few have survived its fearsome jaws
to tell the tale." CR>)
(<VERB? FIND>
<TELL
"There is no grue here, but I'm sure there is at least one lurking
in the darkness nearby. I'd stay in lighted areas if I were you!" CR>)
(<VERB? LISTEN>
<TELL
"It makes no sound but is always lurking in the darkness nearby." CR>)>>
<ROUTINE GROUND-FCN ()
<COND (<AND <VERB? PUT> <==? ,PRSI ,GROUND>>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<VERB? DIG>
<TELL "The ground is too hard for digging here." CR>)>>
<ROUTINE DEBRIS-FCN ()
<COND (<AND ,DOCKED?
,SEEN-MOUSE?
<VERB? TAKE EXAMINE>>
<TELL
"You should leave debris for the maintenance mice." CR>)>>
<ROUTINE ADVENTURER-FCN ()
<COND (<==? ,ADVENTURER ,WINNER>
<COND (<AND ,THAT-END
,THIS-END
<IN? ,SPACESUIT ,WINNER>
<VERB? WALK>
<NOT <AND <EQUAL? ,HERE ,YELLOW-DOCK>
<EQUAL? ,PRSO ,P?WEST>>>
<NOT <AND <EQUAL? ,HERE ,YELLOW-DOCK-EDGE>
<EQUAL? ,PRSO ,P?EAST>>>
<NOT <AND <EQUAL? ,HERE
,SPACESHIP-AIRLOCK>
<EQUAL? ,PRSO ,P?SOUTH ,P?OUT P?DOWN>>>
<NOT <AND <EQUAL? ,HERE ,DEEP-SPACE>
<EQUAL? ,PRSO ,P?IN>>>>
<TELL
"The safety line prevents you from leaving, as it is only about
five meters long. You must detach it to leave." CR>)
(<AND ,THAT-END
<NOT ,THIS-END>
<VERB? WALK>
<IN? ,SAFETY-LINE ,WINNER>>
<MOVE ,SAFETY-LINE ,HERE>
<TELL
"You leave the half-secured safety line behind." CR>
<>)>)>>
<ROUTINE CRETIN ()
<COND (<VERB? GIVE>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<VERB? EAT> <TELL "Auto-cannibalism is not the answer." CR>)
(<VERB? KILL MUNG>
<COND (<==? ,PRSO ,ME>
<JIGS-UP
"If you insist.... Poof, you're dead!">)
(ELSE <TELL "What a silly idea!" CR>)>)
(<VERB? TAKE>
<TELL "How romantic!" CR>)
(<VERB? DISEMBARK>
<TELL "You'll have to do that on your own." CR>)
(<VERB? EXAMINE>
<TELL "That's difficult unless your eyes are prehensile."
CR>)>>
<ROUTINE FIND-IN (WHERE WHAT "AUX" W)
<SET W <FIRST? .WHERE>>
<COND (<NOT .W> <RFALSE>)>
<REPEAT ()
<COND (<FSET? .W .WHAT> <RETURN .W>)
(<NOT <SET W <NEXT? .W>>> <RETURN <>>)>>>
<ROUTINE FIND-TARGET (TARGET "AUX" P T L ROOM)
<COND (<IN? .TARGET ,HERE> ,HERE)
(ELSE
<SET P 0>
<REPEAT ()
<COND (<0? <SET P <NEXTP ,HERE .P>>>
<RETURN <>>)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET T <GETPT ,HERE .P>>
<SET L <PTSIZE .T>>
<COND (<OR <EQUAL? .L ,UEXIT>
<AND <EQUAL? .L ,CEXIT>
<VALUE <GETB .T ,CEXITFLAG>>>
<AND <EQUAL? .L ,DEXIT>
<FSET? <GETB .T ,DEXITOBJ>
,OPENBIT>>>
<SET ROOM <GETB .T 0>>
<COND (<IN? .TARGET .ROOM>
<RETURN .ROOM>)>)>)>>)>>
<GLOBAL COMPUTER-ON T>
<ROUTINE COMPUTER-FCN ("AUX" N)
<COND (<==? ,WINNER ,COMPUTER>
<COND (<NOT ,COMPUTER-ON>
<SETG COMPUTER-ON T>
<TELL "The computer turns itself on." CR>)>
<COND (<OR <VERB? WALK-TO>
<AND <VERB? SET> <==? ,PRSO ,COURSE>>>
<COND (<VERB? WALK-TO> <SETG PRSI ,PRSO>)>
<COND (,DOCKED?
<TELL ,ROPES-OFF CR>
<RTRUE>)
(,ORBIT-MATCHED
<TELL
"\"We just got here! I think we should look around first!\"" CR>
<RTRUE>)
(,COUNTDOWN
<TELL ,BURN-COMING CR>
<RTRUE>)
(,COURSE-SELECTED
<TELL ,IN-TRANSIT CR>
<RTRUE>)>
<COND (<KNOWN-COURSE ,PRSI T>
<TELL "\"Course being set for " D ,PRSI ".">
<COURSE-SET>)
(ELSE
<TELL
"The computer sounds surly. \"I told you to buy those additional I/O options.
You know as well as I do that I can't talk to that stupid mass detector, so I
have no idea where that object is. You're just going to have to tell me the
coordinates from its output. Maybe next time you'll listen.\"" CR>)>)
(<VERB? R THETA PHI>
<COND (<G? ,VIEW-COUNT 0>
<TELL
"\"We just got here. You wouldn't be scared, would you?\"" CR>)
(<G? ,TRIP-COUNT 0>
<TELL ,IN-TRANSIT CR>)
(,DOCKED?
<TELL ,ROPES-OFF CR>)
(,COUNTDOWN
<TELL ,BURN-COMING CR>)
(T <>)>)
(<VERB? NO>
<SETG GOT-INSTRUCTIONS <>>
<SETG R-VALUE <>>
<SETG THETA-VALUE <>>
<SETG PHI-VALUE <>>
<SETG GIVE-UP <>>
<SETG LOST <>>
<TELL "\"Okay.\"" CR>)
(<VERB? YES>
<COND (<AND ,PRSO <NOT <==? ,PRSO ,COURSE>>>
<TELL "\"You can't confirm that!\"" CR>)
(,GOT-INSTRUCTIONS
<SETG GOT-INSTRUCTIONS <>>
<SETG COUNTDOWN T>
<ENABLE <QUEUE I-BURN 3>>
<TELL
"\"Thank you. New navigational program will initiate in fifteen seconds.
There will be a course correction burn of " N <+ 30 <RANDOM 30>> " seconds
duration. I advise you to fasten your seat belt.\"" CR>)
(ELSE
<TELL
"\"No pending program. Confirmation ignored.\"" CR>)>)
(<VERB? LAND>
<COND (,PRSO
<COND (<==? ,PRSO ,ARTIFACT>
<PERFORM ,V?LAND>
<RTRUE>)
(ELSE
<PERFORM ,V?SET ,COURSE ,PRSO>
<RTRUE>)>)
(,DOCKED? <TELL
"\"Error. I am already landed. Program cancelled.\"" CR>)
(<G? ,VIEW-COUNT 0>
<TELL
"\"Working... working... Program aborted. The object is spinning too rapidly
for a safe landing. I can maintain current synchronized course
indefinitely.\"" CR>)
(ELSE <TELL
"\"Program cancelled. There is nothing nearby to land on.\"" CR>)>)
(<VERB? EXAMINE>
<COND (<EQUAL? ,PRSO ,MISSION-STATUS ,COURSE>
<PERFORM ,V?REPORT ,MISSION-STATUS>
<RTRUE>)
(ELSE <TELL
"\"Your eyes are better than mine for that.\"" CR>)>)
(<VERB? HELLO> <TELL "\"Hello, astronaut.\"" CR>)
(<VERB? FIND>
<COND (<==? ,PRSO ,ME>
<PERFORM ,V?REPORT ,MISSION-STATUS>
<RTRUE>)
(<SET N <KNOWN-COURSE ,PRSO <>>>
<REPORT-LOCATION ,PRSO .N 1>)
(ELSE
<TELL "\"I don't know where that is.\"" CR>)>)
(<OR <AND <VERB? REPORT>
<==? ,PRSO ,MISSION-STATUS>>
<AND <VERB? SGIVE GIVE>
<EQUAL? ,MISSION-STATUS ,PRSO ,PRSI>>>
<COND (,LOST
<TELL
"\"We're on our way somewhere unpromising, that's all I can tell you.\"" CR>)
(,GIVE-UP
<TELL
"\"You've given up and are heading for " D ,GIVE-UP ", or had you
forgotten?\"" CR>)
(,DOCKED?
<TELL
"\"We've docked with this odd object. I think those tentacles may have
broken something; I don't feel too well.\"" CR>)
(<G? ,VIEW-COUNT 0>
<TELL
"\"We're on a parallel course with a strange artifact which is
spinning rapidly beneath us.\"" CR>)
(<G? ,TRIP-COUNT 0>
<TELL
"\"We're heading towards that newly reported unknown mass.">
<COND (<G? ,TRIP-COUNT 2>
<TELL
" We are being scanned by radiation emanating from that mass.">)>
<TELL "\"" CR>)
(,COUNTDOWN
<TELL
"\"Counting down to course correction.\"" CR>)
(,GOT-INSTRUCTIONS
<TELL
"\"Waiting for confirmation of new course.\"" CR>)
(<AND <0? ,R-VALUE>
<0? ,THETA-VALUE>
<0? ,PHI-VALUE>>
<TELL
"\"The mass detector has reported discovery of a new mass concentration.
Other than that, things have been pretty dull around here.\"" CR>)
(ELSE
<TELL
"\"We have a partially specified new course:">
<COND (<NOT <0? ,R-VALUE>>
<TELL " R is " N ,R-VALUE ".">)>
<COND (<NOT <0? ,THETA-VALUE>>
<TELL " Theta is " N ,THETA-VALUE ".">)>
<COND (<NOT <0? ,PHI-VALUE>>
<TELL " Phi is " N ,PHI-VALUE ".\"">)>
<CRLF>)>)
(<AND <VERB? LAMP-OFF> <==? ,PRSO ,ALARM>>
<COND (<NOT ,ALARM?>
<TELL "\"It's not on...\"" CR>)
(T
<TELL "\"And about time...\"" CR>
<SETG ALARM? <>>
<QUEUE I-ALARM 0>)>)
(<VERB? WAIT>
<TELL
"\"I can wait quite easily. Probably more easily than you.\"" CR>)
(<AND <VERB? KILL ATTACK MUNG> <==? ,PRSO ,ME>>
<TELL
"\"That is not among my capabilities. Sigh.\"" CR>)
(<PROB 25>
<TELL
"\"That is not among my capabilities. Perhaps if you were to invest in
a few upgrades I could do some of these things, but no...\"" CR>)
(ELSE
<TELL
"\"I'm only a navigational computer. That is not one of my functions.\"" CR>)>)
(<VERB? HELLO>
<TELL
"\"I don't have the patience for small talk.\"" CR>)
(<VERB? LAMP-ON>
<COND (,COMPUTER-ON
<ALREADY "on" ,COMPUTER>)
(ELSE
<SETG COMPUTER-ON T>
<TELL "The computer comes on." CR>)>)
(<VERB? LAMP-OFF>
<COND (,COMPUTER-ON
<SETG COMPUTER-ON <>>
<TELL
"\"If you insist I'll turn off, but remember, my programming impels me
to come back on if something important happens.\"" CR>)
(ELSE <ALREADY "off" ,COMPUTER>)>)
(<VERB? GIVE>
<TELL
"\"I might be able to take that if you had bought the extensors I asked for,
but no...\"" CR>)
(<AND <VERB? TELL> <NOT ,P-CONT>>
<TELL "\"Yes?\"" CR>)>>
<GLOBAL IN-TRANSIT
"\"We're in the midst of a trip. Are you still asleep?\"">
<GLOBAL BURN-COMING
"\"I'm too busy, I've got a burn coming up. You'd better brace
yourself.\"">
<GLOBAL ROPES-OFF
"\"Unless you have some idea of how to get those ropes off me, I
wouldn't try leaving just yet.\"">
<GLOBAL SEAT-BELT? <>>
<ROUTINE I-BURN ()
<SETG COUNTDOWN <>>
<ROB ,DEEP-SPACE>
<TELL
"The ship's thrusters spin it into a proper attitude, and then the engines
begin their course correction burn. There are significant G's and not
a little vibration." CR>
<COND (,SEAT-BELT?
<TELL "Fortunately, you are securely belted in." CR>
<SETG COURSE-SELECTED T>
<ENABLE <QUEUE I-TRIP 3>>)
(ELSE
<SETG R-VALUE 0>
<SETG THETA-VALUE 0>
<SETG PHI-VALUE 0>
<SETG GOT-INSTRUCTIONS <>>
<SETG WINNER ,ADVENTURER>
<JIGS-UP
"The G forces drive you against the rear bulkhead (which is unpadded,
of course). You are crushed to death.">)>>
<GLOBAL COURSE-SELECTED <>>
<GLOBAL TRIP-COUNT 0>
<GLOBAL TRIP-DESCS <LTABLE
"You are headed towards a rather bright starlike object."
"The starlike object now shows some shape."
"You are approaching a huge, cylindrical asteroid."
"The asteroid is unnaturally smooth, but there are surface features on it."
"Filling space before you is an enormous artifact, more than 5 km long
and about a kilometer in diameter. Regularly spaced around its waist are
bumps and other odd protrusions. You cannot see the aft end but the fore
end sports a glass or crystal dome almost 100 meters across. This dome is
brightly lit.">>
<ROUTINE I-TRIP ()
<TELL "Time passes as you journey towards your destination." CR>
<SETG TRIP-COUNT <+ ,TRIP-COUNT 1>>
<COND (,GIVE-UP
<TELL
"|
You arrive at " D ,GIVE-UP " safe and sound. On the other hand,
you seem to have given up, as " D ,GIVE-UP " has no prospects as a locale
for quantum black holes. As it would be tedious to continue, this is the
end.|
">
<FINISH>
<RTRUE>)>
<COND (<EQUAL? ,HERE
,SPACESHIP-BRIDGE ,SPACESHIP-AIRLOCK ,DEEP-SPACE>
<COND (<OR ,LOST <NOT <==? ,DESTINATION ,MASS>>>
<TELL "There is nothing interesting visible ahead." CR>)
(ELSE
<TELL <GET ,TRIP-DESCS ,TRIP-COUNT> CR>)>)>
<COND (<==? ,TRIP-COUNT 5>
<COND (,LOST
<TELL
"You have reached your destination. The computer speaks: \"There's
nothing here, as I predicted. You never listen do you? This trip is over;
See if I'll ever work with you again...\"|
|" CR>
<FINISH>)
(<==? ,DESTINATION ,MASS>
<TELL
"There is a brief burn as the ship matches course with the artifact. You
are hanging in space about one kilometer away from the waist of the object.
The Starcross's engines shut down. The computer speaks: \"Program
completed. We are being scanned by low level radiation at various frequencies.
Waiting for instructions.\"" CR>
<SETG VIEW-COUNT 1>
<ENABLE <QUEUE I-VIEW 2>>
<SETG ORBIT-MATCHED T>)
(ELSE
<TELL
"Ahead is a nondescript nickel-iron asteroid, rather a small one too. It is
obvious that you have picked the wrong destination.|
|" CR>
<FINISH>)>)
(ELSE
<COND (<AND <NOT ,LOST>
<==? ,DESTINATION ,MASS>>
<COND (<==? ,TRIP-COUNT 3>
<TELL
"The computer says, \"Telescopic observations reveal the object ahead to
be extremely regular in shape. This is not your usual asteroid.\"" CR>)
(<==? ,TRIP-COUNT 4>
<TELL
"The computer remarks: \"I detect low-level scanning taking place. The
radiation is not dangerous. I think we may be getting into something
more than we expected here.\"" CR>)>)>
<ENABLE <QUEUE I-TRIP 3>>)>>
<GLOBAL VIEW-COUNT 0>
<GLOBAL ORBIT-MATCHED <>>
<ROUTINE I-VIEW ()
<COND (<EQUAL? ,HERE ,SPACESHIP-BRIDGE ,SPACESHIP-AIRLOCK>
<TELL
"As the object rotates beneath you, the surface features of a different
area are visible through the viewport." CR>
<TELL <GET ,VIEW-TABLE <MOD <- ,VIEW-COUNT 1> 4>> CR>)>
<SETG VIEW-COUNT <+ ,VIEW-COUNT 1>>
<COND (<==? ,VIEW-COUNT 5> <TENTACLE-APPEARS>)
(ELSE <ENABLE <QUEUE I-VIEW 2>>)>>
<GLOBAL VIEW-TABLE <TABLE
"There is an area with a blue dome below. Near the dome is a spherical object
which just might be a spaceship. It is held down by silvery ropes."
"The area here has a yellow dome. The surface of the object here looks damaged
and scorched, and is littered with tangled debris."
"This area has a green dome and a long, silvery spaceship tethered nearby."
"Below is an area with a red dome which has no ship near it.">>
<ROUTINE TENTACLE-APPEARS ()
<ENABLE <QUEUE I-MOUSE 1>>
<ENABLE <QUEUE I-BAD-AIR <+ 75 <RANDOM 50>>>>
<TELL
"Suddenly an odd protrusion near the red dome splits open and a huge
articulated metal tentacle issues from it at great speed.">
<COND (<EQUAL? ,HERE ,DEEP-SPACE>
<CRLF>
<JIGS-UP
"The tentacle grabs the ship around the hull, spinning you off into the
depths of space!">)
(<EQUAL? ,HERE ,SPACESHIP-BRIDGE ,SPACESHIP-AIRLOCK>
<TELL
" It approaches the ship and delicately wraps itself around the hull."> <COND (,SEAT-BELT?
<TELL
" You are slammed against your seat">)
(ELSE
<TELL
" You are smashed against the bulkhead">)>
<TELL " as the tentacle accelerates the Starcross to
the speed of rotation of the object. Inexorably, your ship is drawn toward
the dome. When you are a few tens of meters away, three smaller tentacles
issue forth and grapple the ship solidly to the surface of the artifact. The
large tentacle retreats into its housing, which closes.|">
<COND (,SEAT-BELT?
<TELL
"|
You are disoriented: now that you are attached to the artifact, which is
rotating, \"up\" and \"down\" have taken on new meanings. Your sense
of balance tells you that your ship is clinging to the underside of some
enormous object, and if you aren't careful you will fall! \"Up\" now
refers to the center of the object, \"down\" to the immensities of space." CR>)
(ELSE
<JIGS-UP "Unfortunately, the accelerations involved were tremendous,
and being smashed into the walls didn't help your condition either.">)>)
(ELSE
<JIGS-UP
"Something has grabbed the ship! You are slammed against the bulkhead!
After a great deal of buffeting, there is a metallic clang and the ship is
at rest, but unfortunately, so are you.">)>
<SETG DOCKED? T>>
<GLOBAL DOCKED? <>>
<GLOBAL TAPE-ON <>>
<ROUTINE TAPE-FCN ()
<COND (<VERB? TAKE>
<COND (<IN? ,TAPE-PLAYER ,SPIDER>
<TELL "The spider refuses to part with it." CR>)
(ELSE <RFALSE>)>)
(<NOT <IN? ,TAPE-PLAYER ,WINNER>>
<DONT-HAVE ,TAPE-PLAYER>)
(<VERB? LAMP-ON>
<COND (,TAPE-ON
<ALREADY "on" ,TAPE-PLAYER>)
(ELSE
<SETG TAPE-ON T>
<TELL "The " D ,PRSO " comes on." CR>)>)
(<VERB? LAMP-OFF>
<COND (,TAPE-ON
<SETG TAPE-ON <>>
<TELL "The " D ,PRSO " is now off." CR>)
(ELSE <ALREADY "off" ,TAPE-PLAYER>)>)
(<VERB? PLAY WEAR>
<COND (<NOT ,TAPE-ON>
<TELL "First, you must turn on the tape player." CR>)
(ELSE
<TELL
"The player picks a recently referenced selection: ">
<TELL <PICK-ONE ,TAPES> CR>)>)
(<VERB? LISTEN>
<COND (,TAPE-ON
<TELL
"The tape player continues with the previous selection." CR>)
(ELSE <TELL "The player isn't on." CR>)>)>>
<GLOBAL TAPES
<LTABLE
"A lecture on the history of Brazil in the 2030's begins."
"This is a discussion of contemporary trends in literature."
"Bach's \"The Well-Tempered Clavier\" is played."
"\"Fantasia,\" complete with holo-projection, begins."
"A list of the works of Edgar Rice Burroughs is read off."
"This is Pynchon's \"Gravity's Rainbow.\""
"Vernon's \"Origins of the Third World War\" plays."
"The classic computer mystery \"Deadline\" is displayed."
>>
\
<ROUTINE MOUSE-CONT ()
<COND (<VERB? TAKE>
<TELL
"The maintenance mouse buzzes for a moment, then rotates its \"ears\" in your
direction as you reach for the " D ,PRSO ". It seems profoundly puzzled at
your behavior." CR>
<RFALSE>)>>
<ROUTINE MOUSE-GOODIES ()
<COND (<FIRST? ,MOUSE>
<TELL " It has already collected ">
<PRINT-CONTENTS ,MOUSE>
<TELL ".">)>
<RTRUE>>
<ROUTINE MOUSE-FCN ("OPTIONAL" (RARG <>))
<COND (<==? .RARG ,M-OBJDESC>
<COND (<IN? ,MOUSE ,GARAGE>
<TELL
"There is a maintenance mouse here.">)
(,SEEN-MOUSE?
<TELL
"There is a maintenance mouse here, cheerfully scouring the area for garbage.">
<MOUSE-GOODIES>)
(ELSE
<SETG SEEN-MOUSE? T>
<TELL
"A small metal contraption about a meter long and half a meter high
enters the room." ,LONG-MOUSE>)>
<CRLF>)
(<AND <EQUAL? ,GLOBAL-MOUSE ,PRSO ,PRSI>
<NOT <IN? ,MOUSE ,HERE>>>
<COND (<VERB? FOLLOW>
<COND (,GARAGED?
<TELL "You can't go through the hole." CR>)
(,MFOLLOW
<DO-WALK ,MFOLLOW> <RTRUE>)
(ELSE
<TELL "You've lost him." CR>)>)
(ELSE <TELL "There is no mouse here." CR>)>)
(<VERB? FOLLOW>
<TELL "He's right here!" CR>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<DISABLE <INT I-MOUSE>>
<REMOVE ,MOUSE>
<TELL "The mouse is obliterated, squealing piteously." CR>)
(<VERB? MUNG>
<TELL "The maintenance mouse is unscathed." CR>)
(<VERB? EXAMINE LOOK-INSIDE>
<COND (<VERB? EXAMINE>
<TELL
"The maintenance mouse is a boxy machine with a large receptacle on top in
which various objects it collects can be stored. It is buzzing back and forth
looking for garbage, diligently polishing the floor, and waving its \"ears\"
(small dish antennae) about." CR>)>
<COND (<FIRST? ,MOUSE>
<TELL "The receptacle on the mouse's back contains: ">
<PRINT-CONTENTS ,MOUSE>
<TELL "." CR>)
(ELSE <TELL "The receptacle is empty." CR>)>)
(<VERB? OPEN CLOSE>
<TELL
"The mouse has no lid, just an open receptacle on its back." CR>)>>
<GLOBAL LONG-MOUSE " Its guidance system (two large dish antennae at the
front) circles quizzically. A power antenna juts from the rear. On top
is a small tray. It cleans the floor as it goes, humming contentedly. All
in all, it looks like nothing so much as a mechanical mouse.">
<ROUTINE OUT-OF-HOLE ()
<COND (<AND ,SEEN-MOUSE? ,LIT>
<TELL
"A maintenance mouse" ,HOLE-SHUTS "." CR>)
(ELSE
<SETG SEEN-MOUSE? T>
<TELL
"A small metal contraption" ,HOLE-SHUTS " as soon as the device emerges.
The device stops in its tracks and buzzes briefly, giving you a shot at
a closer look." ,LONG-MOUSE CR>)>
<RTRUE>>
<GLOBAL HOLE-SHUTS
" emerges from a hitherto unnoticed hole in the wall. The hole slides shut and
becomes practically invisible">
<GLOBAL SEEN-MOUSE? <>>
<GLOBAL MOUSE-LOC <>>
<GLOBAL GARAGED? <>>
<GLOBAL MFOLLOW <>>
<ROUTINE I-MOUSE ("AUX" (OLDM <LOC ,MOUSE>) (HERE? <IN? ,MOUSE ,HERE>)
ROBBED?)
<ENABLE <QUEUE I-MOUSE 2>>
<REMOVE ,MOUSE-HOLE>
<SETG GARAGED? <>>
<SET ROBBED? <ROB <LOC ,MOUSE> ,MOUSE>>
<COND (<AND .ROBBED? .HERE? <NOT <IN? ,MOUSE ,GARAGE>>>
<COND (,LIT
<TELL
"The maintenance mouse, buzzing happily, picks up some refuse." CR>)
(ELSE <TELL "You hear a cheerful buzzing nearby." CR>)>)>
<COND (<IN? ,MOUSE ,GARAGE>
<COND (<FIRST? ,MOUSE>
<ROB ,MOUSE ,TRASH-BIN>
<COND (<IN? ,BLUE-DISK ,TRASH-BIN>
<MOVE ,BLUE-DISK ,GARAGE>)>
<COND (<IN? ,RED-DISK ,TRASH-BIN>
<MOVE ,RED-DISK ,GARAGE>)>
<COND (<AND .HERE? ,LIT>
<TELL
"The mouse rolls up to the trash bin and dumps some stuff into it." CR>)>)>
<COND (<PROB 40>
<COND (<AND .HERE? ,LIT>
<TELL
"The mouse leaves as unobtrusively as it arrived." CR>)>
<MOVE ,MOUSE ,MOUSE-LOC>
<COND (<==? ,MOUSE-LOC ,HERE>
<MOVE ,MOUSE-HOLE ,HERE>
<OUT-OF-HOLE>)>)>
.HERE?)
(<AND .HERE? <PROB 30>>
<COND (,LIT
<TELL
"The maintenance mouse sits in the middle of the room, buzzing
contentedly." CR>)
(ELSE <TELL "There is buzzing nearby." CR>)>)
(<AND <FIRST? ,MOUSE> <PROB 15>>
<SETG MOUSE-LOC <LOC ,MOUSE>>
<MOVE ,MOUSE ,GARAGE>
<SETG GARAGED? T>
<COND (<==? ,HERE ,GARAGE>
<COND (,LIT
<TELL
"A maintenance mouse enters the garage, preparing to dump a load of
trash." CR>)>)
(.HERE?
<MOVE ,MOUSE-HOLE .HERE?>
<COND (,LIT
<TELL
"The mouse disappears into a heretofore unnoticed hole in the wall. "
,HOLE-SHUTS "." CR>)>)>)
(ELSE
<MOVE-MOUSE>
<SET ROBBED? <ROB <LOC ,MOUSE> ,MOUSE>>
<COND (<NOT <IN? ,MOUSE ,HERE>>
<COND (<AND .HERE? ,LIT>
<TELL
"The maintenance mouse glides happily away, looking for new dirt to
conquer." CR>
<RTRUE>)>)
(<AND <NOT ,SEEN-MOUSE?> ,LIT>
<MOUSE-FCN ,M-OBJDESC>)
(,LIT
<TELL
"A maintenance mouse buzzes into the room, intent on trash.">
<MOUSE-GOODIES>
<CRLF>)>
<SET HERE? <IN? ,MOUSE ,HERE>>
<COND (<NOT ,LIT> T)
(.ROBBED?
<COND (.HERE?
<TELL
"The mouse has decided to collect some discarded items." CR>)>)
(.HERE?
<TELL
"The mouse is diligently cleaning the floor and looking for
garbage." CR>)>)>
<IN? ,MOUSE ,HERE>>
<ROUTINE MOVE-MOUSE ("AUX" (H <LOC ,MOUSE>) (P 0) T L (D <>))
<REPEAT ()
<COND (<L? <SET P <NEXTP .H .P>> ,LOW-DIRECTION>
<COND (.D
<COND (<EQUAL? .D ,UP-A-TREE>
<COND (<IN? ,MOUSE ,HERE>
<TELL
"The mouse tries briefly to climb a large tree, but meets little
success." CR>)>
<RFALSE>)
(<EQUAL? .D ,MAZE>
<COND (<IN? ,MOUSE ,HERE>
<TELL
"The mouse tries to enter the warren, but is prodded away by several
aliens." CR>)>
<RFALSE>)
(ELSE
<MOVE ,MOUSE .D>)>)>
<RTRUE>)
(ELSE
<SET T <GETPT .H .P>>
<SET L <PTSIZE .T>>
<COND (<OR <EQUAL? .L ,UEXIT>
<AND <EQUAL? .L ,CEXIT>
<VALUE <GETB .T ,CEXITFLAG>>>>
<COND (<OR <NOT .D> <PROB 50>>
<COND (<IN? ,MOUSE ,HERE>
<SETG MFOLLOW .P>)>
<SET D <GETB .T ,REXIT>>)>)>)>>>
;<ROUTINE V-MOUSE ()
<TELL "The mouse is in " D <LOC ,MOUSE>>
<COND (<FIRST? ,MOUSE>
<TELL ", carrying ">
<PRINT-CONTENTS ,MOUSE>)>
<TELL "." CR>>
<ROUTINE DOOR-PSEUDO ()
<COND (<VERB? THROUGH>
<TELL "Please specify a direction." CR>)
(<VERB? EXAMINE> <AS-ADVERTISED>)>>
<ROUTINE HOLE-FCN ()
<COND (<VERB? OPEN>
<TELL
"There is no apparent way to open the mouse hole. You can
barely even see the seam between it and the wall." CR>)
(<VERB? MUNG>
<TELL
"This has no effect other than to make it even less obvious where the
hole is." CR>)>>
<GLOBAL TRASH-COUNT 0>
<ROUTINE TRASH-BIN-FCN ()
<COND (<VERB? LOOK-INSIDE EXAMINE>
<TELL
"The bin is filled with all sorts of flotsam and jetsam. Bones, clothing,
and broken spears are just some of the items visible on the top layer.">
<COND (<FIRST? ,TRASH-BIN>
<TELL " The bin also contains: ">
<PRINT-CONTENTS ,TRASH-BIN>
<TELL ".">)>
<CRLF>)
(<VERB? SHAKE>
<TELL "The bin is solidly affixed to the floor." CR>)
(<VERB? REACH>
<TELL
"There's a lot of stuff inside the bin." CR>)
(<VERB? SEARCH DIG THROUGH>
<COND (<FSET? ,GREEN-KEY ,TOUCHBIT>
<TELL
"You find nothing else of interest." CR>)
(<==? ,TRASH-COUNT 0>
<TELL
"After searching a bit, you have found a great deal of junk, but nothing
of value. There is a great deal of trash here." CR>
<SETG TRASH-COUNT 25>)
(<PROB ,TRASH-COUNT>
<MOVE ,GREEN-KEY ,TRASH-BIN>
<FSET ,GREEN-KEY ,TOUCHBIT>
<THIS-IS-IT ,GREEN-KEY>
<TELL
"Ahah, there's something! It appears to be a green crystal rod." CR>)
(ELSE
<SETG TRASH-COUNT <+ ,TRASH-COUNT 25>>
<TELL
"You continue sifting through the junk; nothing of interest turns up." CR>)>)>>
<ROUTINE HOLE-PSEUDO ()
<COND (<VERB? EXAMINE>
<TELL
"The hole is deep and the air in it is warm." CR>)
(<AND <VERB? DROP> <==? ,PRSI ,PSEUDO-OBJECT>>
<REMOVE ,PRSO>
<TELL
"The " D ,PRSO " falls into the hole and disappears." CR>)
(<VERB? CLIMB-DOWN THROUGH>
<JIGS-UP
"The hole leads straight to the input hopper of a fusion reactor which
gets some of its power from trash. It is now getting some of its power
from you.">)>>
\
"SUBTITLE SPIDER"
<ROUTINE SPHERE-SHIP-FCN (RARG)
<COND (<==? .RARG ,M-ENTER>
<ENABLE <QUEUE I-SPIDER 1>>)>>
<ROUTINE BUBBLE-ROOM-FCN (RARG)
<COND (<==? .RARG ,M-ENTER>
<DISABLE <INT I-SPIDER>>)>>
<ROUTINE BUBBLE-PSEUDO ()
<COND (<VERB? MUNG>
<TELL "The bubble is made of indestructible plastic." CR>)
(<VERB? LOOK-INSIDE>
<TELL "You can see the dock area quite clearly." CR>)>>
<ROUTINE I-SPIDER ()
<COND (<OR <NOT <IN? ,SPIDER ,SPHERE-SHIP>>
<NOT <IN? ,ADVENTURER ,SPHERE-SHIP>>>
<RFALSE>)>
<ENABLE <QUEUE I-SPIDER 1>>
<COND (<NOT ,REFERRED?>
<COND (<IN? ,TAPE-PLAYER ,SPIDER>
<TELL
"The spider, oblivious to all else, is fiddling with the tape player.
Every so often, he makes a happy little noise." CR>)
(<NOT ,TALKED?>
<COND (<PROB 25>
<SPIDER-GREETING>)
(ELSE
<TELL
"The spider watches you with multifaceted eyes." CR>)>)
(ELSE
<TELL
"The spider sidles along the wires towards you. ">
<TELL "He asks " <PICK-ONE ,SPIDER-QUESTIONS> CR>)>)
(ELSE <SETG REFERRED? <>>)>>
<GLOBAL SPIDER-QUESTIONS
<LTABLE
"you a question about Earth, a rather abstruse one."
"who won the World Cup this year."
"if you have read any good books lately."
"what your astrological sign is."
"your views on the Luna City Manifesto.">>
<GLOBAL REFERRED? <>>
<GLOBAL TALKED? <>>
<ROUTINE TRANSLATOR-FCN ()
<COND (<VERB? ZAP> <PERFORM ,V?ZAP ,ZAP-GUN ,SPIDER> <RTRUE>)>>
<ROUTINE SPIDER-FCN ()
<SETG REFERRED? T>
<COND (<==? ,SPIDER ,WINNER>
<COND (<NOT ,TALKED?>
<SPIDER-GREETING>)>
<COND (<IN? ,TAPE-PLAYER ,SPIDER>
<TELL ,ENGROSSED CR>)
(<VERB? EXAMINE FIND IS-IN FOLLOW>
<TELL
"\"I can't help you there, I'm afraid. I'm quite a stay-at-home, I haven't
left my ship for ages; nothing interesting going on out there any more.
Those furry ones were interesting for a while but they're stagnant now.\"" CR>)
(<AND <VERB? TAKE> <==? ,PRSO ,TAPE-PLAYER>>
<SETG WINNER ,ADVENTURER>
<PERFORM ,V?GIVE ,PRSO ,SPIDER>
<RTRUE>)
(<VERB? TAKE DROP ATTACK KILL MUNG>
<TELL
"\"I couldn't do that. You're just joking, of course. You humans have a
strange idea of humor." CR>)
(<VERB? GIVE SGIVE>
<TELL
"\"No, thank you.\" He seems offended that you would ask for an outright
gift." CR>)
(ELSE
<TELL
"\"I see. Thank you.\" He seems quite pleased." CR>)>)
(<VERB? EXAMINE> <TELL <GETP ,SPIDER ,P?LDESC> CR>)
(<VERB? MUNG>
<JIGS-UP
"Bad idea. The spider grabs you with two of its arms and tears you apart.">)
(<IN? ,TAPE-PLAYER ,SPIDER>
<TELL ,ENGROSSED CR>)
(<VERB? HELLO TELL>
<COND (<NOT ,TALKED?>
<SPIDER-GREETING>
<COND (<VERB? TELL> <RFALSE>)
(ELSE <SETG P-CONT <>> <RTRUE>)>)
(<VERB? HELLO>
<TELL "\"Hello, again.\"" CR>)>)
(<VERB? GIVE>
<COND (<==? ,PRSO ,TAPE-PLAYER>
<SETG TALKED? T>
<MOVE ,YELLOW-KEY ,HERE>
<MOVE ,PRSO ,SPIDER>
<FSET ,PRSO ,NDESCBIT>
<FCLEAR ,PRSO ,TAKEBIT>
<PUTP ,SPIDER ,P?LDESC
"There is a giant spider here, listening to a tape player.">
<TELL
"The spider examines the tape player, then discovers the controls. A random
song begins playing. Agitated, he fiddles with the controls again, and
something else plays, a lecture this time. He becomes even more agitated.
\"What a wonderful gift, human! This will alleviate my boredom for a while.
Your culture is young, but you have amassed enough of interest to keep me
sane for a few more years. I thank you.\" He fishes in a nearby pouch and
comes up with something. \"Perhaps you may find some use from this; I
long ago grew bored with such baubles.\" He tosses a yellow crystal rod at your
feet." CR>)
(ELSE
<TELL
"He takes the " D ,PRSO " politely, looks it over for a moment, and gives
it back. \"No, thank you,\" he sighs." CR>)>)>>
<GLOBAL ENGROSSED
"Gurthark is engrossed in the tape library, and pays no attention to you.">
<ROUTINE SPIDER-GREETING ()
<SETG TALKED? T>
<TELL
"The spider draws forth an object from one of the wire clumps. He fiddles
for a moment, then a voice issues from it: \"Greetings, creature
from Earth. Are you afraid of me? Come closer, I won't harm you.\"|
|
The spider tells you his name is \"Gurthark-tun-Besnap,\" (or something
more-or-less that). Like yourself, he landed here to explore. He didn't
succeed in controlling the artifact before it left his system, and has been
stranded here since. He sighs. \"It has been many centuries, and it's getting
a little boring. The other inhabitants of this place are not too stimulating.
The computer was some company until it malfunctioned. When we began to
approach your system, I got excited! A whole new culture to learn! The end
of boredom, for a while at least. I fed your language to my translator,
from your radio broadcasts, and have eagerly awaited your arrival.\" He grins
broadly, a fairly horrific sight." CR>>
\
"SUBTITLE FORCE FIELD AND TRANSPORTER DISKS"
<ROUTINE GLOBE-SIZE (N)
<TELL "The silvery globe is the size of ">
<COND (<==? .N 1>
<TELL "an orange">
<COND (<IN? ,BLUE-KEY ,FORCE-FIELD-1>
<TELL
". Imbedded in the silver globe is a blue crystal rod">)>)
(<==? .N 2> <TELL "a basketball">)
(<==? .N 3> <TELL "a beachball">)
(T
<TELL "four feet and seems embedded in the floor">)>
<TELL ".">>
<ROUTINE FF-FCN ("OPTIONAL" (RARG <>) "AUX" F)
<COND (<==? .RARG ,M-OBJDESC>
<GLOBE-SIZE ,FF-STRENGTH>
<CRLF>
<COND (<FIRST? ,FF-HERE>
<PRINT-CONT ,FF-HERE <> 0>)>
<RTRUE>)
(<VERB? TAKE>
<TELL "The globe won't budge no matter how hard you try." CR>)
(<VERB? RUB PUSH>
<TELL
"The globe feels neither hot nor cold. The globe doesn't move no matter how
hard you press." CR>)
(<VERB? CLIMB-UP CLIMB-ON BOARD>
<TELL
"Climbing it gives you a strange feeling, so you get back down." CR>)
(<VERB? PUT-UNDER>
<COND (<AND <NOT <FSET? ,PRSO ,TOUCHBIT>>
<NOT <TRYTAKE>>>
<RTRUE>)
(<==? ,FF-STRENGTH 4>
<TELL
"The globe is now touching the floor (in fact part of it seems to be in the
floor), so you can't put anything under it." CR>)
(,UNDER-GLOBE
<TELL
"The " D ,UNDER-GLOBE " is already under the globe." CR>)
(<FSET? ,PRSO ,TAKEBIT>
<COND (<EQUAL? ,PRSO ,RED-DISK ,BLUE-DISK>
<PERFORM ,V?DROP ,PRSO>)
(ELSE <MOVE ,PRSO ,HERE>)>
<SETG UNDER-GLOBE ,PRSO>
<FSET ,PRSO ,NDESCBIT>
<TELL
"The " D ,PRSO " slides under the globe." CR>)
(ELSE <TELL "Be serious!" CR>)>)
(<VERB? PUT-ON>
<COND (<NOT <TRYTAKE>> <RTRUE>)
(<SET F <FIRST? ,FF-HERE>>
<COND (<==? .F ,BLUE-KEY>
<TELL
"The blue rod sticks out of the globe, preventing you from placing the "
D ,PRSO " there." CR>)
(ELSE
<TELL
"The " D .F " is already on the globe, rather precariously balanced." CR>)>)
(ELSE
<MOVE ,PRSO ,FF-HERE>
<TELL
"The " D ,PRSO " is now on the globe." CR>)>)
(<VERB? ZAP>
<COND (<CAN-ZAP?>
<COND (<OR ,UNDER-GLOBE <ROB ,FF-HERE>>
<TELL
"The blast destroys some carelessly stored objects." CR>)>
<COND (,UNDER-GLOBE
<REMOVE ,UNDER-GLOBE>
<SETG UNDER-GLOBE <>>)>
<TELL
"The blast washes over the globe, which grows brighter and brighter as it
overloads, then with a sinister shiver, it disappears!">
<COND (<IN? ,BLUE-KEY ,FORCE-FIELD-1>
<COND (<==? ,FF-HERE ,FORCE-FIELD-1>
<REMOVE ,BLUE-KEY>
<TELL
" The blue rod is destroyed by the blast!">)
(<AND <EQUAL? ,WAS-UNDER-GLOBE
,RED-DISK ,BLUE-DISK>
<NOT <DISKS-OFF? ,WAS-UNDER-GLOBE>>>
<SETG P-NUMBER 4>
<JUNK-INSIDE 4 2 T>)
(ELSE
<MOVE ,BLUE-KEY ,HERE>
<TELL
" A blue rod drops to the floor from the globe's center!">)>)>
<TELL " Moments later, the projector builds up
enough energy to restore the globe, and it reappears." CR>
<COND (<OR <ROB ,FORCE-FIELD-1 ,HERE>
<ROB ,FORCE-FIELD-2 ,HERE>
<ROB ,FORCE-FIELD-3 ,HERE>
<ROB ,FORCE-FIELD-4 ,HERE>
;<ROB ,FF-BOWL-1 ,HERE>
<ROB ,FF-BOWL-2 ,HERE>
<ROB ,FF-BOWL-3 ,HERE>
<ROB ,FF-BOWL-4 ,HERE>>
<TELL
"(The rod wasn't the only thing which dropped.)" CR>)>
<RTRUE>)>)>>
<GLOBAL FF-STRENGTH 2>
<GLOBAL FF-HERE <>>
<GLOBAL FF-TABLE
<TABLE FORCE-FIELD-1 FORCE-FIELD-2 FORCE-FIELD-3 FORCE-FIELD-4>>
<GLOBAL FF-FALLS
<TABLE <> FF-BOWL-2 FF-BOWL-3 FF-BOWL-4>>
<GLOBAL UNDER-GLOBE <>>
<GLOBAL WAS-UNDER-GLOBE <>>
<ROUTINE FF-ROOM-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"This is a glaringly lit room filled with many strange devices. Most are
completely incomprehensible. For example, a huge projector of some sort
points menacingly at a silvery globe floating in midair in the center of
the room. ">
<GLOBE-SIZE ,FF-STRENGTH>
<TELL
" Beneath the projector is a dial with four positions." CR>
<COND (,UNDER-GLOBE
<TELL
"Lying beneath the globe is a " D ,UNDER-GLOBE "." CR>)>
<RTRUE>)
(<AND <==? .RARG ,M-BEG>
<VERB? TAKE>
<==? ,PRSO ,UNDER-GLOBE>>
<SETG UNDER-GLOBE <>>
<RFALSE>)>>
<ROUTINE BLUE-KEY-FCN ()
<COND (<AND <VERB? TAKE>
<IN? ,PRSO ,FORCE-FIELD-1>
<NOT <FSET? ,PRSO ,TOUCHBIT>>>
<TELL
"The blue rod is solidly held by the silvery globe." CR>)>>
<ROUTINE FF-DIAL-FCN ("AUX" OLD)
<COND (<VERB? EXAMINE>
<TELL
"The dial has four positions. It is currently set to " <GET ,NUMTAB ,FF-STRENGTH> "." CR>)
(<AND <VERB? SET> <==? ,PRSI ,INTNUM>>
<COND (<==? ,FF-STRENGTH ,P-NUMBER>
<TELL "That's where it's set now!" CR>)
(<OR <G? ,P-NUMBER 4> <L? ,P-NUMBER 1>>
<TELL
"The dial is clearly labelled with the numbers 1 to 4." CR>)
(ELSE
<TELL
"The globe flickers out for an instant and then reappears, ">
<COND (<G? ,P-NUMBER ,FF-STRENGTH> <TELL "expanded">)
(ELSE <TELL "shrunken">)>
<TELL ". ">
<GLOBE-SIZE ,P-NUMBER>
<CRLF>
<COND (<AND <==? ,FF-STRENGTH 4> ,WAS-UNDER-GLOBE>
<SETG UNDER-GLOBE ,WAS-UNDER-GLOBE>
<FCLEAR ,WAS-UNDER-GLOBE ,INVISIBLE>
<SETG WAS-UNDER-GLOBE <>>)
(<AND <==? ,P-NUMBER 4> ,UNDER-GLOBE>
<SETG WAS-UNDER-GLOBE ,UNDER-GLOBE>
<FSET ,WAS-UNDER-GLOBE ,INVISIBLE>
<SETG UNDER-GLOBE <>>)>
<SET OLD ,FF-HERE>
<REMOVE ,FF-HERE>
<SETG FF-HERE <GET ,FF-TABLE <- ,P-NUMBER 1>>>
<MOVE ,FF-HERE ,FF-ROOM>
<COND (<G? ,P-NUMBER ,FF-STRENGTH>
<JUNK-INSIDE ,P-NUMBER ,FF-STRENGTH>)
(ELSE
<JUNK-OUTSIDE ,P-NUMBER ,FF-STRENGTH>)>
<SETG FF-STRENGTH ,P-NUMBER>)>)>>
<ROUTINE V-FALL () <TELL "Fallen." CR>>
<ROUTINE JUNK-INSIDE (NEW OLD "OPTIONAL" (KEY? <>) "AUX" DEST RO RI)
<SET DEST <GET ,FF-FALLS <- .NEW 1>>>
<COND (<AND <==? ,P-NUMBER 4>
<OR <==? ,WAS-UNDER-GLOBE ,BLUE-DISK>
<==? ,WAS-UNDER-GLOBE ,RED-DISK>>>
<SET DEST ,WAS-UNDER-GLOBE>)>
<SET RO <ROB <GET ,FF-TABLE <- .OLD 1>> .DEST>>
<COND (<SET RI <GET ,FF-FALLS <- .OLD 1>>>
<SET RI <ROB .RI .DEST>>)>
<COND (<OR .RO .RI .KEY?>
<COND (<AND <==? ,P-NUMBER 4>
<EQUAL? ,WAS-UNDER-GLOBE ,BLUE-DISK ,RED-DISK>
<NOT <DISKS-OFF? ,WAS-UNDER-GLOBE>>>
<TELL
"You hear the hum of the transporter disk activating." CR>
<COND (.RI <PERFORM ,V?FALL .RI ,WAS-UNDER-GLOBE>)>
<COND (.RO <PERFORM ,V?FALL .RO ,WAS-UNDER-GLOBE>)>
<COND (.KEY?
<MOVE ,BLUE-KEY ,WAS-UNDER-GLOBE>
<PERFORM ,V?FALL ,BLUE-KEY ,WAS-UNDER-GLOBE>)>
<COND (<AND <IN? ,BLUE-KEY ,FORCE-FIELD-1>
<IN? <LOC <OTHER-DISK ,WAS-UNDER-GLOBE>>
,ROOMS>>
<SCORE-OBJ ,BLUE-KEY>
<FSET ,BLUE-KEY ,TOUCHBIT>
<MOVE ,BLUE-KEY <OTHER-DISK ,WAS-UNDER-GLOBE>>)>
<RTRUE>)
(ELSE
<TELL
"You hear something fall inside the sphere." CR>)>)>
<RTRUE>>
<GLOBAL SPHERE-SHRINKS "When the sphere shrinks, the ">
<ROUTINE JUNK-OUTSIDE (NEW OLD "AUX" R)
<COND (<SET R <ROB <GET ,FF-TABLE <- .OLD 1>> ,FF-ROOM>>
<TELL
,SPHERE-SHRINKS D .R " falls to the new surface and then
slides to the floor." CR>)>
<COND (<SET R <ROB <GET ,FF-FALLS <- .OLD 1>> ,FF-ROOM>>
<TELL
,SPHERE-SHRINKS D .R " falls">
<COND (<EQUAL? ,UNDER-GLOBE ,RED-DISK ,BLUE-DISK>
<TELL ". ">
<MOVE .R ,WINNER> ;"Kludge: make DROP work"
<PERFORM ,V?DROP .R ,UNDER-GLOBE>)
(ELSE
<TELL " onto the floor.">)>
<CRLF>)>
<RTRUE>>
<ROUTINE DISK-FCN ("AUX" THERE OTHER)
<COND (<AND <VERB? TAKE> <EQUAL? ,PRSO ,RED-DISK ,BLUE-DISK>>
<COND (<ROB ,PRSO ,HERE>
<TELL "The stuff on the disk falls to the ground." CR>)>
<DISK-SWITCH ,PRSO <>>
<RFALSE>)
(<AND <VERB? DROP>
<EQUAL? ,PRSO ,RED-DISK ,BLUE-DISK>
<FSET? ,HERE ,RLANDBIT>
<NOT ,PRSI>>
<DISK-SWITCH ,PRSO T>
<MOVE ,PRSO ,HERE>
<TELL
"The " D ,PRSO " drops to the ground. There is an almost inaudible click
as it comes to rest." CR>)
(<AND <VERB? STAND-ON STEP-ON BOARD CLIMB-ON>
<EQUAL? ,PRSO ,RED-DISK ,BLUE-DISK>>
<SET OTHER <OTHER-DISK ,PRSO>>
<COND (<HELD? ,PRSO> <TELL "You're holding it!" CR>)
(<IN? ,PRSO ,MOUSE>
<TELL "The mouse skitters out of the way." CR>)
(<DISKS-OFF? ,PRSO> <TELL "Nothing happens." CR>)
(ELSE
<TELL
"There is a loud click as you step on the disk, and then a moment of
disorientation." CR>
<DISK-SWITCH ,RED-DISK <>>
<DISK-SWITCH ,BLUE-DISK <>>
<SET THERE <FIND-ROOM .OTHER>>
<COND (<EQUAL? .OTHER
,UNDER-GLOBE ,WAS-UNDER-GLOBE>
<JIGS-UP
"You reappear amidst the sphere. Unfortunately, parts of you are inside it
and parts of you are outside it. Very untidy.">
<RTRUE>)>
<COND (<IN? .OTHER ,PRSO>
<REMOVE ,RED-DISK>
<REMOVE ,BLUE-DISK>
<JIGS-UP
"There is a tremendous explosion as the disk tries to transport the other
disk into itself. You are, unfortunately, intimately part of the explosion.">
<RTRUE>)>
<ROB ,PRSO .OTHER>
<COND (<==? ,HERE .THERE>
<TELL
"You reappear in the same room, but on the other disk!" CR>)
(ELSE
<CRLF>
<GOTO .THERE>)>)>)
(<AND <VERB? PUT-ON FALL>
<EQUAL? ,PRSI ,RED-DISK ,BLUE-DISK>>
<COND (<NOT <FSET? ,PRSI ,TOUCHBIT>>
<TELL "It's on the wall!" CR>
<RTRUE>)
(<VERB? PUT-ON>
<COND (<NOT <TRYTAKE>> <RTRUE>)>)>
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<SET OTHER <OTHER-DISK ,PRSI>>
<COND (<DISKS-OFF? ,PRSI> <TELL "Nothing happens." CR>)
(<EQUAL? ,PRSO .OTHER>
<REMOVE ,RED-DISK>
<REMOVE ,BLUE-DISK>
<COND (<==? ,PRSI ,WAS-UNDER-GLOBE>
<SETG WAS-UNDER-GLOBE <>>
<ROB ,FF-BOWL-2>
<ROB ,FF-BOWL-3>
<ROB ,FF-BOWL-4>
<COND (<IN? ,BLUE-KEY ,FORCE-FIELD-1>
<REMOVE ,BLUE-KEY>)>
<TELL
"You hear a muffled explosion." CR>)
(ELSE
<TELL
"The " D ,PRSI " activates as the " D ,PRSO " touches it. It disappears
for the merest fraction of a second, then a blinding flash of light fills
the room as both disks explode!" CR>)>)
(ELSE
<MOVE ,PRSO .OTHER>
<COND (<IN? .OTHER ,PRSI>
<REMOVE ,RED-DISK>
<REMOVE ,BLUE-DISK>
<TELL
"There is a tremendous explosion as the disk tries to transport the other
disk into itself." CR>
<RTRUE>)>
<ROB ,PRSI .OTHER>
<DISK-SWITCH ,RED-DISK <>>
<DISK-SWITCH ,BLUE-DISK <>>
<COND (<AND <IN? .OTHER ,HERE>
<NOT <==? .OTHER ,WAS-UNDER-GLOBE>>>
<COND (<AND <==? ,PRSI ,WAS-UNDER-GLOBE>
<==? ,P-NUMBER 4>>
<TELL
"There is a loud click, and then the " D ,PRSO " appears resting comfortably
on the " D <OTHER-DISK ,PRSI> ".">
<COND (<IN? ,BLUE-KEY ,FORCE-FIELD-1>
<TELL
" The blue rod must have been in range of the disk, because it appeared as
well!">)>
<CRLF>)
(T
<TELL
"There is a loud click from the " D ,PRSI ", and the " D ,PRSO " disappears
for a fraction of a second, then reappears resting comfortably on the "
D .OTHER "." CR>)>)
(ELSE
<TELL
"There is a loud click from the " D ,PRSI " and the " D ,PRSO
" disappears!" CR>)>)>)>>
"DISKS-OFF? returns true if disks can't work"
<ROUTINE DISKS-OFF? (DISK "AUX" OTHER)
<SET OTHER <OTHER-DISK .DISK>>
<COND (<OR <NOT <FSET? ,RED-DISK ,TOUCHBIT>>
<NOT <FSET? ,BLUE-DISK ,TOUCHBIT>>>
<RTRUE>)
(<AND <==? .DISK ,RED-DISK> <NOT ,RED-DISK-ON>>
<RTRUE>)
(<AND <==? .DISK ,BLUE-DISK> <NOT ,BLUE-DISK-ON>>
<RTRUE>)
(<AND <NOT <FSET? <LOC .OTHER> ,RLANDBIT>>
<NOT <IN? .OTHER .DISK>>>
<RTRUE>)>>
<ROUTINE FIND-ROOM (X)
<REPEAT ()
<COND (<NOT .X> ;"this can't happen, of course"
<RETURN ,SPACESHIP-BRIDGE>)
(<IN? .X ,ROOMS> <RETURN .X>)>
<SET X <LOC .X>>>>
<ROUTINE DISK-SWITCH (WHICH NEW)
<FSET .WHICH ,TOUCHBIT>
<COND (<==? .WHICH ,RED-DISK> <SETG RED-DISK-ON .NEW>)
(ELSE <SETG BLUE-DISK-ON .NEW>)>>
<ROUTINE OTHER-DISK (DISK)
<COND (<==? .DISK ,RED-DISK> ,BLUE-DISK)
(ELSE ,RED-DISK)>>
<GLOBAL NUMTAB <LTABLE "1" "2" "3" "4">>
<ROUTINE PROJECTOR-FCN ()
<COND (<VERB? EXAMINE>
<TELL
"It is a formidable looking piece of apparatus that beams some sort of beam
directly at the silvery globe." CR>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<TELL
"The projector is of the sturdiest construction, and is therefore
unscathed." CR>)
(<VERB? MUNG>
<TELL
"The projector is constructed of extremely tough plastic (yes, plastic)
and is unscathed." CR>)>>
<ROUTINE BEAM-FCN ()
<COND (<VERB? EXAMINE>
<TELL
"The beam transfers some sort of energy to the globe. It is impossible to
tell any more." CR>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<TELL
"The beam is pure energy, and is therefore unscathed." CR>)
(<VERB? MUNG>
<TELL
"The beam seems impervious to that." CR>)>>
\
<ROUTINE AIRLOCK-EXIT-FCN ()
<COND (<NOT <FSET? ,AIRLOCK-OUTER ,OPENBIT>>
<ITS-CLOSED ,AIRLOCK-OUTER>)
(,DOCKED?
<TELL
"You exit gingerly, climbing \"up\" to the surface of the artifact, where
your magnetic boots hold you securely as you hang \"upside-down.\"" CR>
<CRLF>
,RED-DOCK)
(ELSE ,DEEP-SPACE)>>
<ROUTINE AIRLOCK-FCN ("OPTIONAL" (RARG ,M-BEG))
<COND (<==? .RARG ,M-LOOK>
<TELL
"This is the airlock of the Starcross. The inner door is
" <DDESC ,AIRLOCK-INNER> ", and the outer door is "
<DDESC ,AIRLOCK-OUTER> ". Neither door has a viewport.">
<COND (<FSET? ,AIRLOCK-OUTER ,OPENBIT>
<TELL " Just outside the airlock is a hook.">)>
<CRLF>)
(<==? .RARG ,M-BEG>
<COND (<AND <VERB? THROUGH> <==? ,PRSO ,AIRLOCK>>
<COND (<==? ,HERE ,SPACESHIP-BRIDGE>
<DO-WALK ,P?OUT>)
(<==? ,HERE ,DEEP-SPACE>
<DO-WALK ,P?IN>)
(ELSE <TELL "You are in it." CR>)>
<RTRUE>)
(<AND <VERB? OPEN CLOSE>
<==? ,HERE ,SPACESHIP-BRIDGE>>
<PERFORM ,PRSA ,AIRLOCK-INNER>
<RTRUE>)>)>>
<ROUTINE RED-LOCK-FCN ("OPTIONAL" (RARG ,M-BEG))
<COND (<==? .RARG ,M-ENTER>
<SETG IN-ARTIFACT? T>
<RFALSE>)
(<==? .RARG ,M-LOOK>
<DESCRIBE-LOCK "red" ,RED-INNER ,RED-OUTER>)>>
<ROUTINE BLUE-LOCK-FCN ("OPTIONAL" (RARG ,M-BEG))
<COND (<==? .RARG ,M-LOOK>
<DESCRIBE-LOCK "blue" ,BLUE-INNER ,BLUE-OUTER>)>>
<ROUTINE GREEN-LOCK-FCN ("OPTIONAL" (RARG ,M-BEG))
<COND (<==? .RARG ,M-LOOK>
<DESCRIBE-LOCK "green" ,GREEN-INNER ,GREEN-OUTER>)>>
<ROUTINE YELLOW-LOCK-FCN ("OPTIONAL" (RARG ,M-BEG))
<COND (<==? .RARG ,M-ENTER>
<SETG IN-ARTIFACT? T>
<RFALSE>)
(<==? .RARG ,M-LOOK>
<DESCRIBE-LOCK "yellow" ,YELLOW-INNER ,YELLOW-OUTER>
<COND (,ALWAYS-LIT
<TELL
"The room is lit by an emergency lighting system." CR>)>
<RTRUE>)>>
<ROUTINE DESCRIBE-LOCK (COLOR INNER OUTER)
<TELL
"This is the main airlock of the " .COLOR " docking port. One door leads out to
the surface, another up into the artifact's interior. The
inner door is " <DDESC .INNER> ", and the outer door is "
<DDESC .OUTER> "." CR>>
<ROUTINE DDESC (D) <COND (<FSET? .D ,OPENBIT> "open")(T "closed")>>
<ROUTINE AIRLOCK-DOORS-FCN ("AUX" DIR)
<COND (<VERB? THROUGH>
<COND (<==? ,HERE ,SPACESHIP-AIRLOCK>
<COND (<==? ,PRSO ,AIRLOCK-INNER>
<SET DIR ,P?WEST>)
(ELSE <SET DIR ,P?UP>)>)
(<==? ,PRSO ,AIRLOCK-INNER>
<SET DIR ,P?EAST>)
(ELSE <SET DIR ,P?DOWN>)>
<DO-WALK .DIR>
<RTRUE>)
(<VERB? OPEN CLOSE>
<COND (<AND ,PRSO ,PRSI <==? ,PRSO ,AIRLOCK>>
<PERFORM ,PRSA ,PRSI>
<RTRUE>)
(<==? ,PRSO ,AIRLOCK-INNER>
<COND (<VERB? OPEN>
<COND (<IN? ,WINNER ,COUCH>
<TELL
"You'll have to get out of the couch first." CR>)
(<FSET? ,PRSO ,OPENBIT>
<ALREADY "open">)
(<FSET? ,AIRLOCK-OUTER ,OPENBIT>
<TELL
"Fortunately the safety interlock prevents you from evacuating the
spaceship by opening both doors of the airlock at once." CR>)
(ELSE
<DOOR-OPENS>)>)
(<IN? ,WINNER ,COUCH>
<TELL
"You'll have to get out of the couch first." CR>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<ALREADY "closed">)
(ELSE
<DOOR-CLOSES>)>)
(<VERB? OPEN> ;"must be outer door, then"
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY "open">)
(<FSET? ,AIRLOCK-INNER ,OPENBIT>
<TELL
"You must close the inner door first, or you will empty all the air out of
the ship. A safety interlock prevents this action." CR>)
(ELSE
<FSET ,PRSO ,OPENBIT>
<VACUUM-HERE>
<COND (<NOT ,DOCKED?>
<TELL
" Outside the airlock is deep space. Beside the airlock is a safety hook
to prevent you from drifting away into space.">)>
<CRLF>
<COND (<NOT ,SUIT-ON?>
<JIGS-UP
"Didn't they teach you to anything in the Academy? You can't breathe
vacuum! The process of dying is this way is very painful but at least
relatively short.">)>
T)>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<ALREADY "closed">)
(ELSE
<FCLEAR ,PRSO ,OPENBIT>
<AIR-HERE>)>)
(<VERB? LOOK-INSIDE>
<COND (<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL
"The " D ,PRSO " is closed and there is no viewport." CR>)
(<==? ,PRSO ,AIRLOCK-INNER>
<TELL "You see the bridge." CR>)
(,DOCKED?
<TELL
"You see the red docking area of the artifact, covered with strange
bumps and protrusions. Forward of here is a dome with an airlock." CR>)
(ELSE <DESCRIBE-SPACE>)>)>>
<ROUTINE DOOR-OPENS ()
<FSET ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " opens." CR>>
<ROUTINE DOOR-CLOSES ()
<FCLEAR ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " closes." CR>>
<ROUTINE DEEP-SPACE-FCN ("OPTIONAL" (RARG <>))
<COND (<==? .RARG ,M-LOOK>
<TELL
"You are floating outside the airlock of the Starcross. The airlock
door is " <COND (<FSET? ,AIRLOCK-OUTER ,OPENBIT> "open")
(T "closed")>>
<COND (,THAT-END
<TELL ". One end of your safety line is attached to
a hook next to the airlock.">)
(ELSE
<TELL ". There is a hook next to the airlock.">)>
<TELL
" This is deep space, outside the plane of the ecliptic and much further out
than the orbit of Earth. The sun seems small but still intolerably bright to
look at directly." CR>
<DESCRIBE-SPACE>)
(<==? .RARG ,M-END>
<COND (<OR <NOT ,THIS-END> <NOT ,THAT-END>>
<TELL
"You have left the Starcross in deep space without a safety
line, a good way to drift away into space and eventually run out of air." CR>
<COND (<PROB 40>
<TELL
"So far you have been lucky and not drifted very far." CR>)
(ELSE <JIGS-UP
"In fact, this is exactly what has happened to you.">)>
<RTRUE>)>)
(<==? .RARG ,M-BEG>
<COND (<VERB? THROW> <THROW-AWAY>)
(<AND <VERB? REACH-FOR>
<EQUAL? ,PRSO ,AIRLOCK-OUTER>>
<COND (<FSET? ,AIRLOCK-OUTER ,OPENBIT>
<TELL
"Just in time you grab the outer hatch and pull yourself back in.|" CR>
<GOTO ,SPACESHIP-AIRLOCK>)
(ELSE
<TELL
"You grab for the hatch, but can't find a handhold!" CR>)>)>)>>
<ROUTINE OUTER-SPACE-FCN ("OPTIONAL" (RARG <>))
<COND (<==? .RARG ,M-LOOK>
<TELL
"You are floating in space above the artifact. A panoramic view of the surface
rotates by below you. Unfortunately you will eventually run out of air, which
will ruin the experience." CR>)
(<==? .RARG ,M-BEG>
<COND (<VERB? THROW>
<THROW-AWAY>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<JIGS-UP
"The gun fires, and the force of the blast drives you back towards the
surface of the artifact! You impact with a tremendous smash, as its
rotation and your velocity combine to wipe you out.">)>)>>
<ROUTINE THROW-AWAY ()
<REMOVE ,PRSO>
<TELL "The " D ,PRSO " sails away into space." CR>>
<GLOBAL COLOR-CODED
"This is a docking port color-coded in red. ">
<ROUTINE DESCRIBE-SPACE ()
<COND (,DOCKED?
<TELL
,COLOR-CODED "Your ship is tethered
securely with thick silvery ropes. You are next to a large dome
with an airlock. The surface looks metallic." CR>)
(<G? ,VIEW-COUNT 0>
<TELL <GET ,VIEW-TABLE <MOD <+ ,VIEW-COUNT 2> 4>>
CR>)
(<G? ,TRIP-COUNT 0>
<COND (<OR ,LOST <NOT <==? ,DESTINATION ,MASS>>>
<TELL
"There is nothing interesting visible." CR>)
(ELSE
<TELL <GET ,TRIP-DESCS ,TRIP-COUNT> CR>)>)
(ELSE <TELL "You see the emptiness of space." CR>)>>
<ROUTINE SHIP-FCN ()
<COND (<VERB? EXAMINE>
<COND (<OR <EQUAL? ,HERE
,SPACESHIP-BRIDGE
,SPACESHIP-AIRLOCK ,SPACESHIP-STORES>
<EQUAL? ,HERE ,SPACESHIP-QUARTERS ,RED-DOCK
,DEEP-SPACE>>
<TELL "The Starcross looks the same as always." CR>)
(<==? ,HERE ,BLUE-DOCK ,BUBBLE-ROOM ,SPHERE-SHIP>
<TELL "This ship looks like a huge crystalline bubble." CR>)
(<==? ,HERE ,UMBILICAL>
<TELL
"It looks like something out of a Buck Rogers movie." CR>)
(ELSE
<TELL
"The Starcross is where you left it, presumably." CR>)>)
(<AND <VERB? BOARD THROUGH> <==? ,HERE ,RED-DOCK>>
<DO-WALK ,P?SOUTH>
<RTRUE>)>>
<ROUTINE ARTIFACT-FCN ()
<COND (<NOT ,DOCKED?> <TELL "What artifact?" CR>)
(<VERB? EXAMINE FIND> <TELL "It's all around!" CR>)>>
<GLOBAL SUIT-ON? <>>
<ROUTINE SPACESUIT-FCN ()
<COND (<AND <VERB? ZAP> <IN? ,SPACESUIT ,CHIEF>>
<PERFORM ,V?ZAP ,ZAP-GUN ,CHIEF>
<RTRUE>)
(<VERB? WEAR BOARD>
<COND (,SUIT-ON? <TELL "You are already wearing it." CR>)
(<NOT <TRYTAKE>> <RTRUE>)
(ELSE
<SETG SUIT-ON? T>
<FSET ,SPACESUIT ,WEARBIT>
<MOVE ,SPACESUIT ,WINNER>
<TELL
"You are now wearing the space suit, breathing internal oxygen." CR>)>)
(<VERB? TAKE-OFF DISEMBARK>
<COND (,SUIT-ON?
<SETG SUIT-ON? <>>
<SETG THIS-END <>>
<FCLEAR ,SPACESUIT ,WEARBIT>
<COND (<FSET? ,HERE ,SPACEBIT>
<JIGS-UP
"That was a pretty silly thing to do, as there is no air here. You
die of all sorts of asphyxiation.">)
(<==? ,POISON-COUNT 4>
<JIGS-UP
"The air is foul and unbreathable, and you pass out almost instantly
after removing the space suit.">)
(ELSE
<TELL
"You have removed the space suit.">
<COND (<ON-ARTIFACT?>
<DESCRIBE-AIR " The air here is ">)
(ELSE <CRLF>)>)>)
(ELSE <TELL "You aren't wearing it." CR>)>)
(<VERB? DROP GIVE THROW>
<COND (,SUIT-ON?
<TELL "You'll have to take it off first!" CR>)
(ELSE
<SETG THIS-END <>>
<RFALSE>)>)
(<AND <IN? ,SPACESUIT ,CHIEF> <VERB? TAKE POINT>>
<TELL
"The chief jumps back, annoyed. He assumes you are trying to go back on
your word." CR>)>>
<ROUTINE JUNK-SPACESUIT-FCN ()
<COND (<AND <IN? ,PRSO ,CHIEF> <VERB? TAKE WEAR BOARD>>
<TELL
"The chief jumps back, annoyed. He points at you and makes a long speech
in his own language." CR>)
(<VERB? WEAR BOARD>
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL "You are already wearing it." CR>)
(ELSE
<FSET ,PRSO ,WEARBIT>
<MOVE ,PRSO ,WINNER>
<TELL
"You are now wearing the tattered old suit, which smells of alien." CR>)>)
(<VERB? TAKE-OFF DISEMBARK>
<COND (<FSET? ,PRSO ,WEARBIT>
<FCLEAR ,PRSO ,WEARBIT>
<TELL
"You are no longer wearing the tattered suit." CR>)
(ELSE <TELL "You aren't wearing it." CR>)>)
(<AND <VERB? DROP GIVE> <FSET? ,PRSO ,WEARBIT>>
<TELL "You'll have to take it off first!" CR>)>>
<GLOBAL THAT-END <>> ;"T if hooked to something"
<GLOBAL THIS-END <>> ;"T if hooked to suit"
<ROUTINE SAFETY-LINE-FCN ("OPTIONAL" (RARG <>))
<COND (<==? .RARG ,M-OBJDESC>
<TELL "A safety line">
<COND (<AND ,THIS-END <NOT <IN? ,SPACESUIT ,WINNER>>>
<SETG THIS-END <>>)>
<COND (<NOT <FSET? ,SAFETY-LINE ,TOUCHBIT>>
<TELL " hangs on the wall." CR>
<RTRUE>)
(,THIS-END
<TELL " (attached to your space suit">
<COND (,THAT-END
<TELL " and a hook">)>
<TELL ")">)
(,THAT-END
<TELL " (attached to a hook)">)>
<TELL " is here." CR>)
(<VERB? EXAMINE>
<COND (,THIS-END
<TELL
"One end of the line is attached to your space suit">
<COND (,THAT-END
<TELL ", and one end to a hook">)>
<TELL "." CR>)
(,THAT-END
<TELL "One end of the line is attached to a hook." CR>)
(ELSE
<TELL "The line is not attached to anything." CR>)>)
(<VERB? TIE UNTIE>
<COND (<NOT <IN? ,SAFETY-LINE ,WINNER>>
<DONT-HAVE ,SAFETY-LINE>)
(<VERB? TIE>
<COND (<==? ,PRSI ,SPACESUIT>
<COND (<NOT <HELD? ,SPACESUIT>>
<DONT-HAVE ,SPACESUIT>
<RTRUE>)
(,THIS-END
<ALREADY "tied" ,SPACESUIT>
<RTRUE>)
(ELSE
<SETG THIS-END ,SPACESUIT>)>)
(<==? ,PRSI ,SAFETY-HOOK>
<COND (,THAT-END
<ALREADY "tied" ,SAFETY-HOOK>
<RTRUE>)
(ELSE
<SETG THAT-END ,SAFETY-HOOK>)>)
(,PRSI
<TELL
"You can't attach the safety line to that." CR>
<RTRUE>)
(ELSE
<TELL "You must tell what to attach it to." CR>
<RTRUE>)>
<TELL "Attached to the " D ,PRSI "." CR>)
(<VERB? UNTIE>
<COND (,PRSI
<COND (<==? ,PRSI ,THAT-END>
<SETG THAT-END <>>)
(<==? ,PRSI ,THIS-END>
<SETG THIS-END <>>)
(ELSE
<TELL "It's not attached to the " D ,PRSI "." CR>
<RTRUE>)>
<TELL "Detached from the " D ,PRSI "." CR>)
(,THAT-END
<TELL "Detached from the " D ,THAT-END "." CR>
<SETG THAT-END <>>)
(,THIS-END
<TELL "Detached from the " D ,THIS-END "." CR>
<SETG THIS-END <>>)
(ELSE
<TELL "It's not attached to anything." CR>)>)>
<RTRUE>)
(<VERB? PUT DROP THROW GIVE PUT-ON>
<COND (<OR ,THIS-END ,THAT-END>
<TELL
"You should detach it first." CR>)>)>>
<GLOBAL DOOR-SOLVED? <>>
<ROUTINE CORIOLIS ()
<COND (<VERB? DROP THROW>
<REMOVE ,PRSO>
<TELL
"As the " D ,PRSO " leaves your hand, it is thrown into space by the rotation
of the artifact." CR>)>>
<ROUTINE RED-DOCK-FCN (RARG)
<COND (<==? .RARG ,M-BEG> <CORIOLIS>)
(<==? .RARG ,M-ENTER>
<SETG IN-ARTIFACT? <>>
<RFALSE>)
(<==? .RARG ,M-LOOK>
<TELL
,COLOR-CODED "All around are strange
protrusions, one of which looks like a hook for a safety line. The surface
here is metallic, but gets stony further from the dock. On one side (\"Down\")
is your ship, tethered securely to the surface of the artifact by thick
silvery ropes. On the other (\"Up\") is a large dome with an airlock">
<COND (<FSET? ,RED-OUTER ,OPENBIT>
<TELL
", which is open." CR>)
(T <TELL "." CR>)>)>>
<ROUTINE BLACK-KEY-FCN ()
<COND (<AND <VERB? TAKE>
<IN? ,BLACK-KEY ,RELIEF>>
<FSET ,RED-OUTER ,OPENBIT>
<MOVE ,BLACK-KEY ,WINNER>
<SCORE-OBJ ,BLACK-KEY>
<SETG DOOR-SOLVED? T>
<TELL
"When you take the black rod, the airlock door opens!" CR>)>>
<ROUTINE RELIEF-FCN ()
<COND (<VERB? EXAMINE>
<COND (<NOT <IN? ,BUMP ,RED-DOCK>>
<TELL
"The relief is no longer a relief. It is completely flattened out." CR>)
(ELSE
<TELL
"A closer examination reveals that there are exactly ten circular bumps or
columns on the sculpture: the first is large and centrally located, the
second through tenth are smaller and scattered at various distances and
orientations. As you go outward from the large bump
in the center there are four small bumps, two rather large ones, two
medium-sized ones, and then a small one again." CR>
<COND (<IN? ,BABY-BUMP ,HERE>
<TELL
"There is also a tiny bump" ,ABOUT-SAME CR>)>)>
T)>>
<ROUTINE INTNUM-FCN ()
<COND (<==? ,HERE ,RED-DOCK>
<COND (<==? ,PRSO ,INTNUM>
<PERFORM ,PRSA ,BUMP ,PRSI>
<RTRUE>)>)>>
<ROUTINE ORDINAL (WRD)
<COND (<EQUAL? .WRD ,W?FIRST ,W?CENTER> 1)
(<==? .WRD ,W?SECOND> 2)
(<==? .WRD ,W?THIRD> 3)
(<==? .WRD ,W?FOURTH> 4)
(<==? .WRD ,W?FIFTH> 5)
(<==? .WRD ,W?SIXTH> 6)
(<==? .WRD ,W?SEVENTH> 7)
(<==? .WRD ,W?EIGHTH> 8)
(<==? .WRD ,W?NINTH> 9)
(<EQUAL? .WRD ,W?TENTH ,W?OUTER ,W?LAST> 10)
(T 0)>>
<ROUTINE BUMP-FCN ("AUX" N)
<COND (<AND <VERB? PUSH RUB>
<EQUAL? ,PRSO ,BUMP ,BUMP-2 ,BABY-BUMP>>
<COND (<AND <EQUAL? ,PRSO ,BUMP ,BUMP-2>
<EQUAL? ,PRSI <> ,INTNUM>>
<COND (<EQUAL? ,PRSI ,INTNUM> T)
(<NOT ,P-ADJECTIVE>
<TELL "You didn't say which one." CR>
<RTRUE>)
(<SET N <ORDINAL ,P-ADJECTIVE>>
<SETG P-NUMBER .N>)
(T
<TELL "Lose, lose!" CR>
<RTRUE>)>)>
<COND (<OR <==? ,PRSO ,BABY-BUMP>
<AND <==? ,P-NUMBER 11>
<IN? ,BABY-BUMP ,HERE>>>
<REMOVE ,BABY-BUMP>
<REMOVE ,BUMP>
<REMOVE ,BUMP-2>
<MOVE ,BLACK-KEY ,RELIEF>
<PUTP ,RELIEF ,P?LDESC
"The door is covered by a smooth pattern of silver hexagons.">
<TELL
"The entire sculpture flattens out completely, except at the former
location of the tiny bump, where a hexagonal rod of black crystal
is extruded." CR>)
(<0? ,P-NUMBER>
<TELL "You must specify which one." CR>)
(<AND <==? ,P-NUMBER 4>
<NOT <IN? ,BABY-BUMP ,HERE>>>
<MOVE ,BABY-BUMP ,HERE>
<TELL
"Nothing happens for a moment, then a tiny column made up of only one hexagon
appears at" ,ABOUT-SAME CR>)
(ELSE
<REMOVE ,BABY-BUMP>
<REMOVE ,BUMP>
<REMOVE ,BUMP-2>
<PUTP ,RELIEF ,P?LDESC
"The door is covered by a smooth pattern of silver hexagons.">
<TELL
"All of the hexagons extend to full length, then retract into the surface,
leaving the sculpture completely smooth." CR>)>)>>
<GLOBAL ABOUT-SAME
" about the same distance from the center as the first large bump.">
<ROUTINE RED-DOORS-FCN ("AUX" DIR)
<COND (<VERB? THROUGH>
<COND (<==? ,HERE ,RED-LOCK>
<COND (<==? ,PRSO ,RED-INNER>
<SET DIR ,P?UP>)
(ELSE <SET DIR ,P?DOWN>)>)
(<==? ,PRSO ,RED-INNER>
<SET DIR ,P?DOWN>)
(ELSE <SET DIR ,P?UP>)>
<DO-WALK .DIR>
<RTRUE>)
(,DOOR-SOLVED?
<COND (<VERB? OPEN CLOSE>
<AIRLOCK-OPEN ,RED-INNER ,RED-OUTER ,RED-DOCK>)
(<VERB? LOOK-INSIDE>
<AIRLOCK-LOOK ,RED-INNER ,RED-THREE ,RED-DOCK>)>)
(<VERB? OPEN CLOSE>
<TELL "The airlock door won't budge." CR>)>>
<ROUTINE BLUE-DOORS-FCN ("AUX" DIR)
<COND (<VERB? THROUGH>
<COND (<==? ,HERE ,BLUE-LOCK>
<COND (<==? ,PRSO ,BLUE-INNER>
<SET DIR ,P?UP>)
(ELSE <SET DIR ,P?DOWN>)>)
(<==? ,PRSO ,BLUE-INNER>
<SET DIR ,P?DOWN>)
(ELSE <SET DIR ,P?UP>)>
<DO-WALK .DIR>
<RTRUE>)
(<VERB? OPEN CLOSE>
<AIRLOCK-OPEN ,BLUE-INNER ,BLUE-OUTER ,BLUE-DOCK>)
(<VERB? LOOK-INSIDE>
<AIRLOCK-LOOK ,BLUE-INNER ,BLUE-THREE ,BLUE-DOCK>)>>
<GLOBAL YELLOW-OPEN? <>>
<ROUTINE YELLOW-DOORS-FCN ("AUX" DIR)
<COND (<NOT ,LIT> <TELL "It is too dark here to see." CR>)
(<VERB? THROUGH>
<COND (<==? ,HERE ,YELLOW-LOCK>
<COND (<==? ,PRSO ,YELLOW-INNER>
<SET DIR ,P?UP>)
(ELSE <SET DIR ,P?DOWN>)>)
(<==? ,PRSO ,YELLOW-INNER>
<SET DIR ,P?DOWN>)
(ELSE <SET DIR ,P?UP>)>
<DO-WALK .DIR>
<RTRUE>)
(<AND <==? ,PRSO ,YELLOW-OUTER>
<VERB? OPEN PUSH>
<NOT ,YELLOW-OPEN?>
<NOT <FSET? ,YELLOW-INNER ,OPENBIT>>>
<TELL
"The door appears to be jammed. There may be debris outside blocking
it. Perhaps if you pushed again." CR>
<SETG YELLOW-OPEN? T>)
(<VERB? OPEN CLOSE PUSH>
<AIRLOCK-OPEN ,YELLOW-INNER ,YELLOW-OUTER ,YELLOW-DOCK>)
(<VERB? LOOK-INSIDE>
<AIRLOCK-LOOK ,YELLOW-INNER ,YELLOW-THREE ,YELLOW-DOCK>)>>
<ROUTINE YELLOW-DOCK-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"This dock area is severely scorched and damaged where other docks have rope
housings. There was apparently a major explosion here, or possibly a
chemically fueled rocket attempted to leave without taking proper precautions.
There is a hook beside the airlock." CR>
<COND (<IN? ,SCORCHED-ALIEN ,YELLOW-DOCK-EDGE>
<TELL
"Entangled in debris at the edge of the dock, to port, is what might be a
body. It is out of reach from here." CR>)>
<RTRUE>)
(<==? .RARG ,M-BEG>
<BRODY>)
(<==? .RARG ,M-ENTER>
<SETG IN-ARTIFACT? <>>
<RFALSE>)>>
<GLOBAL IN-ARTIFACT? <>>
<ROUTINE BRODY ()
<COND (<VERB? LEAP>
<COND (<AND ,THIS-END ,THAT-END>
<TELL
"You sail away into space as far as your safety line allows, and
then back again." CR>)
(ELSE
<ENABLE <QUEUE I-SUFFOCATE 5>>
<TELL
"You fly away into space like a super-hero. Unfortunately, you keep
going indefinitely, the artifact dwindling beneath you. The view is nice,
but eventually you will run out of air." CR>
<CRLF>
<GOTO ,OUTER-SPACE>)>)
(ELSE <CORIOLIS>)>>
<ROUTINE YELLOW-DOCK-EXITS ()
<COND (<AND ,THIS-END ,THAT-END>
<TELL
"You crawl across dock area, your magnetic boots overcoming the effect
of centripetal force. The metal area they can cling to ends before you reach
the edge of the dock, but thanks to your safety line you make it successfully
to the tangle of debris." CR>
<CRLF>
,YELLOW-DOCK-EDGE)
(ELSE
<TELL
"You crawl across the dock area, your magnetic boots holding you safe.
Unfortunately, the metallic area ends short of the tangle of debris. If you
went further, you would be thrown into space by centripetal force." CR>
<RFALSE>)>>
<ROUTINE YELLOW-DOCK-EDGE-FCN (RARG)
<COND (<==? .RARG ,M-BEG>
<BRODY>)
(<==? .RARG ,M-END>
<COND (<AND ,THIS-END ,THAT-END> <RFALSE>)
(ELSE
<ENABLE <QUEUE I-SUFFOCATE 5>>
<TELL
"Now that you are no longer moored by the safety line, centripetal force
throws you into space in a lovely trajectory which (as a matter of academic
interest) looks curved from your perspective as the artifact rapidly rotates
away under you." CR>
<CRLF>
<GOTO ,OUTER-SPACE>)>)>>
<ROUTINE I-SUFFOCATE ()
<COND (<==? ,HERE ,OUTER-SPACE>
<JIGS-UP
"You run out of air, dying an unpleasant death \"above\" the artifact.">)>>
<ROUTINE SCORCHED-PSEUDO ()
<COND (<VERB? TAKE EXAMINE>
<TELL "It's too far away." CR>)>>
<ROUTINE GREEN-DOORS-FCN ("AUX" DIR)
<COND (<VERB? THROUGH>
<COND (<==? ,HERE ,GREEN-LOCK>
<COND (<==? ,PRSO ,GREEN-INNER>
<SET DIR ,P?UP>)
(ELSE <SET DIR ,P?DOWN>)>)
(<==? ,PRSO ,GREEN-INNER>
<SET DIR ,P?DOWN>)
(ELSE <SET DIR ,P?UP>)>
<DO-WALK .DIR>
<RTRUE>)
(<VERB? OPEN CLOSE>
<AIRLOCK-OPEN ,GREEN-INNER ,GREEN-OUTER ,GREEN-DOCK>)
(<VERB? LOOK-INSIDE>
<AIRLOCK-LOOK ,GREEN-INNER ,GREEN-THREE ,GREEN-DOCK>)>>
<ROUTINE AIRLOCK-OPEN (INNER OUTER OUTLOC)
<COND (<==? ,PRSO .INNER>
<COND (<VERB? OPEN PUSH>
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY "open">)
(<FSET? .OUTER ,OPENBIT>
<TELL
"It refuses to open and a bright light flashes incessantly until
you remove your hand from the door." CR>)
(ELSE
<DOOR-OPENS>)>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<ALREADY "closed">)
(ELSE
<DOOR-CLOSES>)>)
(<VERB? OPEN PUSH> ;"must be outer door, then"
<COND (<FSET? ,PRSO ,OPENBIT>
<ALREADY "open">)
(<FSET? .INNER ,OPENBIT>
<TELL
"A bright light over the door flashes menacingly until you remove your
hand." CR>)
(ELSE
<FSET ,PRSO ,OPENBIT>
<COND (<FSET? .OUTLOC ,SPACEBIT>
<VACUUM-HERE>
<CRLF>
<COND (<NOT ,SUIT-ON?>
<CRLF>
<JIGS-UP
"Didn't they teach you anything in the Academy? You can't breathe
vacuum! The process of dying is this way is very painful but at least
relatively short.">)>)
(T <DOOR-OPENS>)>
T)>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<ALREADY "closed">)
(ELSE
<FCLEAR ,PRSO ,OPENBIT>
<AIR-HERE>)>>
<ROUTINE IN-AIRLOCK? ()
<OR <EQUAL? ,HERE ,RED-LOCK ,GREEN-LOCK ,YELLOW-LOCK>
<EQUAL? ,HERE ,BLUE-LOCK ,SPACESHIP-AIRLOCK>>>
<ROUTINE AIR-HERE ()
<TELL "The outer door closes">
<COND (<IN-AIRLOCK?>
<FCLEAR ,HERE ,SPACEBIT>
<TELL " and air rushes into the airlock">)>
<TELL "." CR>>
<ROUTINE VACUUM-HERE ()
<TELL "The outer door opens">
<COND (<IN-AIRLOCK?>
<FSET ,HERE ,SPACEBIT>
<TELL " and air rushes out of the airlock">)>
<TELL ".">>
<ROUTINE AIRLOCK-LOOK (INNER INNEXT OUTNEXT)
<COND (<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL
"The " D ,PRSO " is closed and there is no viewport." CR>)
(<==? ,PRSO .INNER>
<GO&LOOK .INNEXT>)
(ELSE <GO&LOOK .OUTNEXT>)>>
<ROUTINE GO&LOOK (RM "AUX" OHERE OLIT (OSEEN <>))
#DECL ((RM) OBJECT)
<SET OHERE ,HERE>
<COND (<FSET? .OHERE ,TOUCHBIT>
<SET OSEEN T>)>
<SET OLIT ,LIT>
<SETG HERE .RM>
<SETG LIT <LIT? .RM>>
<PERFORM ,V?LOOK>
<COND (<NOT .OSEEN> <FCLEAR .OHERE ,TOUCHBIT>)>
<SETG HERE .OHERE>
<SETG LIT .OLIT>
T>
<ROUTINE COUCH-FCN ("OPTIONAL" (RARG <>))
<COND (<NOT <==? ,HERE ,SPACESHIP-BRIDGE>>
<COND (<VERB? CLIMB-ON CLIMB-DOWN BOARD>
<TELL "That seat is taken...." CR>)
(T <EX-CHECK>)>)
(<AND <VERB? EXAMINE> <==? .RARG ,M-BEG> <==? ,PRSO ,COUCH>>
<DESCRIBE-SEAT-BELT>
<RTRUE>)
(<==? .RARG ,M-BEG>
<COND (<VERB? WALK>
<TELL "You'll have to stand up first." CR>)
(<AND <VERB? STAND DISEMBARK> ,SEAT-BELT?>
<TELL
"You must unfasten your seat belt first." CR>)
(<VERB? CLIMB-ON CLIMB-DOWN>
<PERFORM ,V?BOARD ,COUCH>
<RTRUE>)
(<AND <VERB? TAKE-OFF> <==? ,PRSO ,COUCH>>
<PERFORM ,V?DISEMBARK ,COUCH>
<RTRUE>)
(<VERB? TAKE>
<TELL "You can't reach it." CR>
<RTRUE>)>)
(<==? .RARG ,M-ENTER>
<DESCRIBE-SEAT-BELT>)>>
<ROUTINE DESCRIBE-SEAT-BELT ()
<TELL "The couch has a seat belt which is currently ">
<COND (,SEAT-BELT? <TELL "fastened." CR>)
(ELSE <TELL "unfastened." CR>)>>
<ROUTINE SEAT-BELT-FCN ()
<COND (<NOT <IN? ,WINNER ,COUCH>>
<TELL "You must sit down first." CR>)
(<VERB? TIE WEAR LOCK>
<COND (,SEAT-BELT? <TELL "It's already fastened." CR>)
(ELSE <SETG SEAT-BELT? T> <TELL "Click." CR>)>)
(<VERB? UNTIE TAKE-OFF OPEN UNLOCK REMOVE>
<COND (<NOT ,SEAT-BELT?>
<TELL "It's already unfastened." CR>)
(ELSE <SETG SEAT-BELT? <>> <TELL "Click." CR>)>)
(<VERB? EXAMINE>
<TELL "The seat belt is ">
<COND (,SEAT-BELT? <TELL "fastened." CR>)
(ELSE <TELL "unfastened." CR>)>)>>
<ROUTINE BUREAU-PSEUDO ()
<COND (<VERB? OPEN LOOK-INSIDE>
<TELL "There is nothing in the bureau but some clothes." CR>)>>
\
"SUBTITLE PRIMITIVE ALIENS"
<GLOBAL ALIENS-FRIENDLY? T>
<GLOBAL ALIENS-DESCRIBED? <>>
<ROUTINE VILLAGE-NW-EDGE-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"This is the edge of a populated area, growing denser as you move starboard.
Primitive huts line the corridor, which is blocked ahead by a palisade built of
mud and wood. An open gate, guarded by several spear-bearing creatures, leads
into the structure. A small crowd of aliens has gathered to watch you." CR>
<COND (<NOT ,ALIENS-DESCRIBED?>
<SETG ALIENS-DESCRIBED? T>
<DESCRIBE-WEASELS>
<ENABLE <QUEUE I-CHIEF-APPEARS <+ 3 <RANDOM 3>>>>)>
<COND (,ALIENS-FRIENDLY?
<TELL
"They gesture in a way intended to show friendship (they bare
their huge razor-sharp teeth)." CR>
<COND (<NOT ,HUSTLED?>
<TELL
"The smaller ones are hustled away, but almost immediately begin to sneak
back." CR>)>)
(ELSE
<TELL
"They stare at you with mingled awe and belligerence." CR>
<COND (<NOT ,HUSTLED?>
<TELL
"The smaller ones are hustled away, leaving only the better-armed members
of the tribe." CR>)>)>
<SETG HUSTLED? T>
<RTRUE>)
(<==? .RARG ,M-BEG>
<COND (<OR <AND <VERB? GIVE> <==? ,PRSI ,CHIEF>>
<AND <VERB? DROP> <IN? ,CHIEF ,HERE>>>
<GIVE-TO-CHIEF>)>)>>
<ROUTINE PALISADE-FCN ()
<COND (<AND <VERB? ZAP> <CAN-ZAP?>>
<SETG ALIENS-FRIENDLY? <>>
<TELL
"The palisade smolders a bit, but is otherwise undamaged." CR>)
(<VERB? CLIMB-UP CLIMB-ON>
<TELL
"The palisade in unclimbable from this side." CR>)>>
<ROUTINE VILLAGE-FCN (RARG)
<COND (<==? .RARG ,M-BEG>
<COND (<AND <VERB? WALK>
<IN? ,SPACESUIT ,CHIEF>
<==? ,PRSO ,P?EAST>
<NOT <IN? ,CHIEF ,VILLAGE>>
<L? ,CHFOLLOW 2>>
<PERFORM ,V?FOLLOW ,CHIEF>
<RTRUE>)>)
(<==? .RARG ,M-ENTER>
<COND (<IN? ,SPACESUIT ,VILLAGE>
<REMOVE ,JUNK-SPACESUIT>
<MOVE ,SPACESUIT ,CHIEF>)>
<RFALSE>)>>
<ROUTINE ENTER-WARREN ()
<COND (,ALIENS-FRIENDLY? ,MAZE)
(ELSE
<TELL
"Hostile weasels bar your way." CR>
<RFALSE>)>>
<ROUTINE GIVE-TO-CHIEF ()
<COND (<==? ,PRSO ,SPACESUIT>
<COND (,SUIT-ON? <RFALSE>)>
<MOVE ,JUNK-SPACESUIT ,HERE>
<FCLEAR ,JUNK-SPACESUIT ,NDESCBIT>
<MOVE ,SPACESUIT ,CHIEF>
<FSET ,SPACESUIT ,NDESCBIT>
<SETG THIS-END <>>
<SETG THAT-END <>>
<SETG SUIT-ON? <>>
<TELL
"The chieftain removes his suit, and with surprisingly little difficulty dons
yours. He is clearly delighted with the gift, and his people are truly
impressed by his new wardrobe. He moves about, pointing at various objects
(including some of his lesser wives and children) and glancing at you
quizzically." CR>
<ENABLE <QUEUE I-CHIEF 2>>
<COND (,POINTED?
<TELL
"He tries (somewhat sheepishly) to conceal the brown rod in the space suit,
hoping you won't notice it." CR>)>
<RTRUE>)
(<NOT ,ALIENS-FRIENDLY?>
<TELL "He snarls at you, exposing razor-sharp teeth." CR>)
(<IN? ,SPACESUIT ,ADVENTURER>
<TELL
"The chief refuses your gift but gazes hungrily at your space suit." CR>)
(<IN? ,SPACESUIT ,CHIEF>
<TELL
"The chief considers the space suit to have been enough, and graciously
refuses the gift." CR>)
(ELSE
<TELL
"The chief looks pleased by the offer (as a token of your submission, no
doubt), but turns it down." CR>)>>
<GLOBAL HUSTLED? <>>
<ROUTINE I-CHIEF-APPEARS ()
<COND (<==? ,HERE ,VILLAGE>
<FCLEAR ,GLOBAL-CHIEF ,INVISIBLE>
<MOVE ,CHIEF ,HERE>
<TELL
"From down a passage between the hovels appears a large, almost
all-grey alien." CR>
<COND (<IN? ,SPACESUIT ,CHIEF>
<TELL
"He is wearing a human space suit and grinning cheerfully." CR>)
(ELSE
<TELL
"He is dressed in the tattered remains of a space suit of alien manufacture.
All that remains is the helmet and scraps of the body material." CR>)>
<COND (<IN? ,BROWN-KEY ,CHIEF>
<TELL
"Around his neck hangs a brown crystal rod!" CR>)>
<TELL "The crowd parts to let him through." CR>
<COND (<IN? ,SPACESUIT ,ADVENTURER>
<TELL
"He looks at you in awe, staring at your space suit. He points to it,
and then at himself, and brandishes his spear menacingly." CR>)
(,ALIENS-FRIENDLY?
<TELL "He greets you warmly." CR>)>
<ENABLE <QUEUE I-CHIEF 2>>)
(ELSE
<COND (<NOT ,ACTIVITY?>
<SETG ACTIVITY? T>
<COND (<EQUAL? ,HERE ,VILLAGE ,VILLAGE-NW-EDGE>
<TELL
"There seems to be activity in the village center." CR>)>)>
<ENABLE <QUEUE I-CHIEF-APPEARS 1>>)>>
<GLOBAL ACTIVITY? <>>
<ROUTINE DESCRIBE-WEASELS ()
<TELL
"They resemble human-sized weasels in that their bodies are thin,
flexible, and covered with several colors of hair. There are all sizes
and ages, and the stronger ones are armed with spears, knives, and other
nasty hardware." CR>>
<ROUTINE ALIENS-FCN ()
<COND (<AND <IN? ,CHIEF ,HERE> <NOT <VERB? ZAP ATTACK>>>
<COND (<==? ,ALIENS ,WINNER>
<SETG WINNER ,CHIEF>
<PERFORM ,PRSA ,PRSO ,PRSI>)
(<==? ,PRSO ,CHIEF>
<PERFORM ,PRSA ,CHIEF ,PRSI>)
(<==? ,PRSI ,CHIEF>
<PERFORM ,PRSA ,PRSO ,CHIEF>)
(ELSE <TELL "You are ignored." CR>)>
<RTRUE>)
(<VERB? SMILE>
<COND (,ALIENS-FRIENDLY? <TELL "It smiles back." CR>)
(T <TELL "It snarls at you." CR>)>)
(<VERB? TELL>
<SETG P-CONT <>>
<TELL "The aliens pay no heed." CR>)
(<==? ,HERE ,GRASSLAND-2>
<COND (<G? ,HUNTER-COUNT 0>
<COND (<NOT <VERB? FIND EXAMINE>>
<SPOILED-HUNT>
<COND (<VERB? ZAP>
<CRLF>
<ZAP-ALIENS>)>
<RTRUE>)>)
(ELSE <TELL "There are no aliens here." CR>)>)
(<VERB? ZAP> <ZAP-ALIENS>)
(<VERB? FOLLOW> <TELL "They aren't going anywhere." CR>)
(<VERB? ATTACK KILL MUNG THROW>
<SETG ALIENS-FRIENDLY? <>>
<TELL "The weasels shy away in fright." CR>)>>
<ROUTINE ZAP-ALIENS ("OPTIONAL" (ZAP-CHIEF? <>))
<SETG ALIENS-FRIENDLY? <>>
<COND (<0? ,ZAP-CNT>
<TELL
"Nothing happens. Emboldened, the aliens surround you." CR>)
(<FIRST? ,ZAP-GUN>
<ZAP-GUN-FCN>
<TELL "The aliens are impressed and terrified." CR>)
(ELSE
<SETG ZAP-CNT <- ,ZAP-CNT 1>>
<COND (<AND .ZAP-CHIEF? <IN? ,CHIEF ,HERE>>
<TELL "The chief is">
<DISABLE <INT I-CHIEF>>
<REMOVE ,CHIEF>)
(ELSE <TELL "Many aliens are">)>
<TELL
" disintegrated, in the best tradition of the 1930s pulps.
The remainder of the tribe attacks you, seeking revenge. You fire the
ray gun at them. ">
<COND (<G? ,ZAP-CNT 0>
<TELL
"It fires " <GET ,ZAP-STRS <- ,ZAP-CNT 1>> ". Each time
many aliens are dispatched, but more appear." CR>)
(ELSE <TELL "Nothing happens." CR>)>
<SETG ZAP-CNT 0>
<JIGS-UP "Ultimately, you are overwhelmed.">)>>
<GLOBAL ZAP-STRS <TABLE "once" "twice" "three times">>
<ROUTINE CHIEF-FCN ("OPTIONAL" (RARG <>) "AUX" SUIT?)
<COND (<==? .RARG ,M-OBJDESC>
<TELL "The chief alien">
<COND (<SET SUIT? <IN? ,JUNK-SPACESUIT ,CHIEF>>
<TELL
", wearing a tattered space suit">)
(<SET SUIT? <IN? ,SPACESUIT ,CHIEF>>
<TELL
", wearing your space suit">)>
<COND (<IN? ,BROWN-KEY ,CHIEF>
<TELL " and a brown crystal rod,">)
(.SUIT? <TELL ",">)>
<TELL " is here." CR>)
(<VERB? FOLLOW>
<COND (<IN? ,CHIEF ,HERE>
<TELL
"You can't follow him until he leaves..." CR>)
(<L? ,CHFOLLOW 2>
<SETG CHFOLLOW 0>
<SETG CHPATH <- ,CHPATH 1>>
<COND (<0? ,CHPATH>
<ENABLE <QUEUE I-CHIEF 1>>
<MOVE ,CHIEF ,GREEN-THREE>
<GOTO ,GREEN-THREE>)
(ELSE
<MOVE ,CHIEF ,MAZE>
<GOTO ,MAZE>)>)
(<==? ,HERE ,VILLAGE>
<DO-WALK ,P?EAST>
<RTRUE>)
(ELSE
<TELL
"You have lost track of him in the maze of twists and turns." CR>)>
<RTRUE>)
(<NOT <IN? ,CHIEF ,HERE>>
<TELL "There is no chief here." CR>)
(<OR <VERB? TELL HELLO>
<AND <==? ,CHIEF ,WINNER> <IN? ,CHIEF ,HERE>>>
<SETG P-CONT <>>
<TELL
"The chief listens intently, then responds in his own language, probably
saying something like \"That's Greek to me.\"" CR>)
(<VERB? EXAMINE>
<TELL
"The chief is an perfect example of barbarian dignity and splendor.">
<COND (<IN? ,SPACESUIT ,CHIEF>
<TELL " He is wearing your space suit with the same
dignity and aplomb which which a dandy would wear his evening clothes.">)
(<IN? ,BROWN-KEY ,CHIEF>
<TELL
" Tied around his neck with a string is a brown crystal rod.">)>
<CRLF>)
(<VERB? SMILE>
<COND (,ALIENS-FRIENDLY? <TELL "He smiles back." CR>)
(T <TELL "He snarls at you." CR>)>)
(<VERB? ZAP> <ZAP-ALIENS T>)
(<VERB? ATTACK MUNG>
<SETG ALIENS-FRIENDLY? <>>
<RFALSE>)
(<VERB? POINT> <TELL "The chief seems puzzled." CR>)
(<VERB? GIVE> <GIVE-TO-CHIEF>)>>
<GLOBAL POINTED? <>>
<ROUTINE BROWN-KEY-FCN ()
<COND (<IN? ,BROWN-KEY ,CHIEF>
<COND (<AND <VERB? ZAP> <CAN-ZAP?>>
<PERFORM ,V?ZAP ,CHIEF>
<RTRUE>)
(<VERB? TAKE>
<TELL
"The chief jumps back and waves his spear at you angrily!" CR>)
(<VERB? POINT>
<SETG POINTED? T>
<COND (<IN? ,SPACESUIT ,CHIEF>
<FCLEAR ,BROWN-KEY ,NDESCBIT>
<SCORE-OBJ ,BROWN-KEY>
<MOVE ,BROWN-KEY ,ADVENTURER>
<SETG ALIENS-FRIENDLY? T>
<TELL
"The chief hesitates, understanding you all too well, then reluctantly
removes the rod from its string and hands it to you." CR>)
(<IN? ,SPACESUIT ,ADVENTURER>
<TELL
"The chief looks at you shrewdly, then points at your space suit." CR>)
(ELSE
<TELL
"The chief is offended." CR>)>)>)>>
<ROUTINE WIFE-PSEUDO ()
<COND (<AND <VERB? ZAP> <CAN-ZAP?>>
<SETG ALIENS-FRIENDLY? <>>
<TELL
"She is totally destroyed by the blast! Fortunately for the chief, he has
many wives, and this was a lesser one." CR>)
(<VERB? TAKE POINT>
<COND (<NOT <IN? ,BROWN-KEY ,CHIEF>> <RFALSE>)
(<IN? ,SPACESUIT ,CHIEF>
<TELL
"She snarls at her husband and grimaces at you. The chief waves his hands as
if to say \"Never mind.\"" CR>)>)>>
<ROUTINE CHILD-PSEUDO ()
<COND (<AND <VERB? ZAP> <CAN-ZAP?>>
<SETG ALIENS-FRIENDLY? <>>
<TELL
"The agile young weasel dodges the blast, laughing at you." CR>)
(<VERB? TAKE POINT>
<COND (<NOT <IN? ,BROWN-KEY ,CHIEF>> <RFALSE>)
(<IN? ,SPACESUIT ,CHIEF>
<TELL
"The child sticks its tongue at you and scampers off. Other young weasels
caper about, making noises that sound much like laughter." CR>)>)>>
<ROUTINE MAZE-FCN (RARG)
<FCLEAR ,MAZE ,TOUCHBIT>
<COND (<IN? ,CHIEF ,VILLAGE>
<QUEUE I-CHIEF 0>
<REMOVE ,CHIEF>)>
<COND (<==? .RARG ,M-BEG>
<COND (<AND <VERB? WALK> <PROB 5>>
<GOTO ,VILLAGE>)
(<VERB? DROP>
<TELL
"As soon as you drop the " D ,PRSO ", one of the smaller creatures rushes
over and grabs it! He charges out of the room, squeaking with glee." CR>
<COND (<PROB 25>
<TELL
"With a roar, an older weasel grabs the young one before it escapes and cuffs
it soundly about the ears. The elder creature hands you back the " D ,PRSO ",
grinning and grunting in a friendly way." CR>)
(ELSE <REMOVE ,PRSO>)>)>)
(<==? .RARG ,M-ENTER>
<ROB ,HERE ,THRONE-ROOM>)>>
<GLOBAL CHFOLLOW 2> ;"can't follow him initially"
<GLOBAL CHWAIT 0> ;"how long chief waiting for trade"
<GLOBAL CHPATH 0> ;"how many moves left in maze"
<ROUTINE I-CHIEF ("AUX" (OLDP <LOC ,CHIEF>))
<COND (<AND <IN? ,CHIEF ,VILLAGE>
<IN? ,BROWN-KEY ,CHIEF>
<NOT <G? ,CHWAIT 10>>>
<SETG CHWAIT <+ ,CHWAIT 1>>
<COND (<IN? ,CHIEF ,HERE>
<TELL
"The chief gestures impatiently at ">
<COND (<OR <IN? ,SPACESUIT ,ADVENTURER>
<IN? ,SPACESUIT ,HERE>>
<TELL "your space suit.">)
(ELSE
<TELL "various objects.">)>
<CRLF>)>
<ENABLE <QUEUE I-CHIEF 2>>
<RTRUE>)
(<IN? ,CHIEF ,GREEN-THREE>
<TELL
"The chief grins, exposing his knife-sharp teeth, and points portentiously at
the ladder. He curls up on the dirt floor and waits, watching you with
interest." CR>
<DISABLE <INT I-CHIEF>>
<RTRUE>)>
<REMOVE ,CHIEF>
<SETG CHFOLLOW <+ ,CHFOLLOW 1>>
<COND (<G? ,CHWAIT 10> ;"chief tired of waiting"
<COND (<IN? ,WINNER .OLDP>
<TELL
"The chief appears insulted and disappears into the warren. The others appear
to be upset." CR>)>
<SETG ALIENS-FRIENDLY? <>>
<SETG CHFOLLOW 2>
<RTRUE> ;"chomped. don't reenable")>
<COND (<IN? ,WINNER .OLDP>
<SETG CHFOLLOW 0>
<COND (<==? .OLDP ,VILLAGE>
<SETG CHPATH <+ 5 <RANDOM 5>>>)>
<TELL <PICK-ONE ,CHIEF-MOVES> CR>)
(<IN? ,WINNER ,MAZE>
<COND (<PROB 5>
<MOVE ,CHIEF ,MAZE>
<SETG CHFOLLOW 0>
<TELL
"The chief enters the room and seems surprised but pleased to see you." CR>)
(ELSE <SETG CHWAIT <+ ,CHWAIT 1>>)>)>
<ENABLE <QUEUE I-CHIEF
<COND (<PROB 75> 1)(ELSE 2)>>>
<RTRUE>>
<GLOBAL CHIEF-MOVES <LTABLE
"The chief slips through an opening and disappears."
"Dodging several youngsters, the chief enters a hovel."
"The chief slips through a crowd, which parts deferentially."
"Glancing back at you, the chief leaves the room.">>
<ROUTINE SKELETON-FCN ()
<COND (<VERB? TAKE RUB MOVE>
<COND (<FSET? ,VIOLET-KEY ,INVISIBLE>
<MOVE ,VIOLET-KEY ,THRONE-ROOM>
<FCLEAR ,VIOLET-KEY ,INVISIBLE>
<THIS-IS-IT ,VIOLET-KEY>
<TELL
"When you touch the skeleton, its arm falls off the armrest. Something
slides out of the space suit and onto the floor." CR>)
(ELSE
<SETG ALIENS-FRIENDLY? <>>
<JIGS-UP
"This time, the skeleton falls apart with a horrendous clatter. In a moment,
a head peeks through the door. It's a weasel! He roars, and soon dozens of
the aliens surround you. The rest is, alas, too gory to describe.">)>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<SETG ALIENS-FRIENDLY? <>>
<JIGS-UP
"The skeleton is totally destroyed by the blast! The aliens, hearing it,
rush in and overwhelm you for desecrating their sacred place.">)>>
<GLOBAL CAUGHT? <>>
<ROUTINE ITS-CLOSED (OBJ)
<TELL "The " D .OBJ " is closed." CR>
<THIS-IS-IT .OBJ>
<RFALSE>>
<ROUTINE GREEN-LOCK-EXIT ()
<COND (<NOT <FSET? ,GREEN-INNER ,OPENBIT>>
<ITS-CLOSED ,GREEN-INNER>)
(<FSET? ,VIOLET-KEY ,INVISIBLE> ,GREEN-THREE)
(,CAUGHT?
<TELL "Outraged aliens bar your way." CR>
<RFALSE>)
(ELSE
<ALIEN-GUARDS>
<RFALSE>)>>
<ROUTINE GREEN-THREE-FCN (RARG)
<COND (<==? .RARG ,M-ENTER>
<COND (<NOT <FSET? ,VIOLET-KEY ,INVISIBLE>>
<ALIEN-GUARDS>
<RFATAL>)>)>>
<ROUTINE ALIEN-GUARDS ()
<SETG CAUGHT? T>
<SETG ALIENS-FRIENDLY? <>>
<REMOVE ,VIOLET-KEY>
<JIGS-UP
"As you re-enter the warren an alien approaches, spear in hand. Initially he
looks friendly but becomes suspicious and rushes past you into the ship. There
is a loud roar as he realizes you have desecrated the altar! Other aliens
surround you, spears at the ready.">
<RFATAL>>
<ROUTINE NEST-CAGE-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"The force projectors here aren't working, but the cage is nonetheless
inhabited by many creatures who are crosses between a rat and an ant. They
are multi-legged with chitinous shells and a pincer arrangement for a mouth,
but they have long ratlike tails and sparse tufts of hair. Some of them are
armed with tiny spears and walk precariously on their hind legs.">
<COND (<IN? ,NEST ,NEST-CAGE>
<TELL
" In one corner is a very large mud and stick nest.">
<COND (<FIRST? ,NEST>
<TELL
" The nest is constructed of all sorts of odds and ends, including ">
<PRINT-CONTENTS ,NEST>
<TELL ".">
<COND (<IN? ,RED-KEY ,NEST>
<TELL
" The rod is embedded in the mud near one of the entrances of the nest.">)>)>)
(<IN? ,SMASHED-NEST ,NEST-CAGE>
<TELL
" In one corner is a ruined nest which has been broken into many
smaller pieces.">
<COND (<FIRST? ,SMASHED-NEST>
<TELL
" Resting among the fragments of the nest can be seen ">
<PRINT-CONTENTS ,SMASHED-NEST>
<TELL ".">)>)>
<COND (,RATS-MAD?
<TELL
" The rat-ants are extremely agitated about your presence, and a detail
follows you just out of reach, hissing and clicking their mandibles.">)>
<CRLF>)>>
<GLOBAL RATS-MAD? <>>
<ROUTINE RAT-ANT-FCN ()
<COND (<VERB? TELL>
<TELL "The rat-ant ignores you." CR>
<SETG P-CONT <>>
<RTRUE>)
(<VERB? EXAMINE>
<TELL
"The rat-ant looks like a cross between a rat and an ant. They have
chitinous shells, mandibles, and exhibit an ant-like social order. They also
have hair, bear live young, and are roughly the size of rats. They have a
crude intelligence, evidenced by the spears the warrior caste carries. The
cage has many rat-ants of varying sizes, ages, and social roles." CR>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<SETG RATS-MAD? T>
<TELL
"Several rat-ant warriors are reduced to ash, but many more rush out to
replace them, and these look mad!" CR>)
(<VERB? MUNG>
<SETG RATS-MAD? T>
<TELL
"The rat-ants become ferocious, rushing about clicking their mandibles
and squeaking." CR>)
(<AND <VERB? GIVE> <==? ,PRSI ,RAT-ANT>>
<FSET ,PRSO ,NDESCBIT>
<MOVE ,PRSO <COND (<IN? ,NEST ,HERE> ,NEST)
(<IN? ,SMASHED-NEST ,HERE> ,SMASHED-NEST)
(T
<TELL
"The rat-ants ignore you in their grief." CR>
<RTRUE>)>>
<TELL
"A rat-ant takes the " D ,PRSO " and incorporates it into the nest." CR>)>>
<ROUTINE NEST-FCN ("AUX" (TOOL <>))
<COND (<VERB? EXAMINE>
<TELL
"The nest is a jerry-built construction of odds and ends precariously stuck
together. Rat-ants swarm all over it." CR>)
(<VERB? KICK>
<TELL
"Rat-ants nip at your toes and prevent it." CR>)
(<OR <AND <VERB? MUNG>
<==? ,PRSO ,NEST>
,PRSI>
<AND <VERB? THROW>
<==? ,PRSI ,NEST>
,PRSO>>
<COND (<VERB? MUNG> <SET TOOL ,PRSI>)
(ELSE <SET TOOL ,PRSO>)>
<COND (<==? .TOOL ,HANDS>
<TELL
"Rat-ants snap at you with their nasty sharp mandibles." CR>
<RTRUE>)
(<NOT <IN? .TOOL ,WINNER>>
<DONT-HAVE .TOOL>
<RTRUE>)
(<G? <GETP .TOOL ,P?SIZE> 5>
<FSET .TOOL ,NDESCBIT>
<MOVE .TOOL ,SMASHED-NEST>
<COND (<IN? ,RED-KEY ,NEST>
<FSET ,RED-KEY ,TOUCHBIT>
<FSET ,RED-KEY ,NDESCBIT>
<MOVE ,RED-KEY ,SMASHED-NEST>)>
<MOVE ,SMASHED-NEST ,NEST-CAGE>
<ROB ,NEST ,SMASHED-NEST T>
<REMOVE ,NEST>
<ENABLE <QUEUE I-NEST 15>>
<TELL
"The nest smashes into fragments and the rat-ants stop dead in their tracks!
They frantically evacuate the nest and immediately begin constructing a new
nest at the opposite end of the cage. Rat-ant babies are being carried across
the cage, and warriors watch you suspiciously." CR>)
(ELSE
<FSET .TOOL ,NDESCBIT>
<MOVE .TOOL ,NEST>
<TELL
"The " D .TOOL " doesn't damage the nest very much, and in fact a
rat-ant quickly incorporates it into the nest." CR>)>)
(<VERB? ZAP>
<REMOVE ,NEST>
<DISABLE <INT I-NEST>>
<TELL
"The nest and all it contains is destroyed." CR>)>>
<ROUTINE I-NEST ()
<MOVE ,NEST ,NEST-CAGE>
<ROB ,SMASHED-NEST ,NEST T>
<ROB ,NEST-CAGE ,NEST T>
<REMOVE ,SMASHED-NEST>
<COND (<==? ,HERE ,NEST-CAGE>
<TELL
"The rat-ants have completed their new nest, frugally incorporating all
the materials from the old nest. They leave a few guards to
watch you while the others retire inside for a well-earned rest." CR>)>>
<ROUTINE NEST-CONT ()
<COND (<VERB? TAKE>
<TELL
"As you reach for the " D ,PRSO ", a rat-ant pokes its head out of the nest
and snaps at you with its needle-sharp mandibles. You draw back just in
time." CR>)>>
<ROUTINE SMASHED-NEST-CONT ()
<COND (<VERB? TAKE>
<FCLEAR ,PRSO ,NDESCBIT>
<>)>>
<GLOBAL MELTED? <>>
<GLOBAL FRIED? <>>
<GLOBAL SWITCH-ON? <>>
<GLOBAL GOT-KEY? <>>
<ROUTINE PANEL-FCN ()
<COND (<AND <VERB? OPEN>
<NOT <FSET? ,PANEL ,OPENBIT>>>
<FSET ,PANEL ,OPENBIT>
<TELL
"Opening the access panel reveals rack upon rack of metallic cards.">
<COND (<IN? ,CARD ,SLOT>
<TELL
" All the slots have cards in them." CR>)
(ELSE
<TELL
" There is one slot that has no card in it." CR>)>)>>
<ROUTINE SLOT-FCN ()
<COND (<VERB? PUT>
<COND (<==? ,PRSO ,CARD>
<COND (<IN? ,CARD ,SLOT>
<TELL "It's already there." CR>)
(ELSE
<MOVE ,CARD ,SLOT>
<TELL
"The card slides snugly into the slot.">
<COND (,SWITCH-ON?
<SETG FRIED? T>
<ENABLE <QUEUE I-MELTDOWN 2>>
<TELL
" Almost immediately the smell of burning components assaults your nostrils,
and smoke pours from the card.">)>
<CRLF>
<RTRUE>)>)
(ELSE
<WONT-FIT>)>)>>
<ROUTINE I-MELTDOWN ()
<COND (,SWITCH-ON?
<SETG MELTED? T>
<SETG SWITCH-ON? <>>
<REMOVE ,CARD>
<TELL
"The computer has now been completely fried by this electrical fire.
Congratulations!" CR>)>>
\
"SUBTITLE WEAPONS DECK AND ZAP GUN"
<GLOBAL ZAP-CNT 3>
<GLOBAL ZAP-NUMS <LTABLE "one" "two" "three" "four">>
"use CAN-ZAP? to do right thing in frobs that want to handle being zapped."
<ROUTINE CAN-ZAP? ()
<COND (<OR <0? ,ZAP-CNT> <IN? ,SILVER-KEY ,ZAP-GUN>>
<RFALSE>)
(ELSE
<SETG ZAP-CNT <- ,ZAP-CNT 1>>
<RTRUE>)>>
<ROUTINE ZAP-GUN-FCN ("AUX" I)
<SET I <FIRST? ,ZAP-GUN>>
<COND (<VERB? EXAMINE>
<TELL
"It looks like the heavy duty model. It's got quite a bit of heft to it, and
you really need two hands to aim it properly. The barrel is long and festooned
with strange knobs and antennae. There is a charge indicator which is
unfortunately unreadable." CR>)
(<VERB? OPEN> <TELL "You can't open that." CR>)
(<VERB? LOOK-INSIDE>
<COND (.I
<FSET ,ZAP-GUN ,OPENBIT>
<TELL "In the barrel is a " D .I "!" CR>
<SCORE-OBJ .I>
<RTRUE>)
(ELSE <TELL "There is nothing inside the barrel." CR>)>)
(<AND <VERB? SHAKE> .I>
<TELL "There is something loose inside it." CR>)
(<AND <VERB? PUT> <==? ,ZAP-GUN ,PRSI>>
<COND (.I <TELL "There is already something inside it." CR>)
(<NOT <FSET? ,PRSO ,KEYBIT>>
<WONT-FIT>)>)
(<VERB? POINT>
<TELL "Why don't you just fire it instead?" CR>)
(<VERB? MUNG ATTACK>
<TELL
"Firing the ray gun is more efficient than smashing things with it." CR>)
(<VERB? ZAP>
<COND (<NOT <IN? ,ZAP-GUN ,WINNER>>
<TELL "You are firing it by mental force, I assume?" CR>
<RTRUE>)
(<==? ,ZAP-CNT 0>
<TELL "\"Click.\"" CR>
<RTRUE>)>
<SETG ZAP-CNT <- ,ZAP-CNT 1>>
<COND (.I
<REMOVE .I>
<SETG ZAP-CNT <- ,ZAP-CNT 1>>
<TELL
"A giant blast">
<COND (<==? .I ,SILVER-KEY>
<TELL " of silvery rays">)>
<TELL " issues from the barrel, but it doesn't
go very far. In fact, there is a secondary explosion about a foot from
the barrel, scattering dust motes in the air. There is almost no
recoil: instead the gun vibrated almost painfully. This felt like a
misfire." CR>)
(<FSET? ,HERE ,RAIRBIT> <JATO>)
(<NOT ,PRSI>
<TELL
"A giant blast of searing orange rays issues from the barrel, and the
recoil knocks you flat on your back. Fortunately no one was standing
in front of you or it would have been curtains." CR>)
(<EQUAL? ,PRSI ,ME ,HANDS>
<ROB ,WINNER>
<JIGS-UP
"If you say so... The blast destroys you and your possessions so quickly
there is no point in even describing the carnage.">)
(<==? ,PRSI ,ZAP-GUN>
<TELL
"That would involve a higher technology than even the builders of the
ray gun possessed." CR>)
(<FSET? ,PRSI ,VILLAIN>
<REMOVE ,PRSI>
<TELL
"A mighty wash of orange rays and smoke covers the " D ,PRSI ". The powerful
blast knocks you down as the poor " D ,PRSI " is utterly disintegrated." CR>)
(<IN? ,PRSI ,WINNER>
<ROB ,WINNER>
<TELL
"A huge explosion of orange rays destroys the " D ,PRSI " utterly." CR>
<JIGS-UP
"Unfortunately, that requires firing so close that the blast destroys
you and your possessions as well.">)
(<OR <FSET? ,PRSI ,TAKEBIT> <FSET? ,PRSI ,VICBIT>>
<REMOVE ,PRSI>
<TELL
"There is a horrendous explosion from the barrel of the ray gun, and a huge
gout of orange rays envelops the " D ,PRSI ". You are knocked spinning by the
recoil, and when you recover, nothing is left of the " D ,PRSI " but a tiny
drift of dust." CR>)
(ELSE
<TELL
"An explosion of orange rays sweeps over the " D ,PRSI ", but when the
smoke clears, it is still there (though perhaps a bit singed)." CR>)>)
(<AND <VERB? KILL MUNG ATTACK>
<==? ,ZAP-GUN ,PRSI>>
<PERFORM ,V?ZAP ,PRSI ,PRSO>
<RTRUE>)>>
\
"SUBTITLE INSIDE THE CYLINDER"
<ROUTINE TREE-FCN ()
<COND (<VERB? CLIMB-UP CLIMB-ON CLIMB-FOO> <DO-WALK ,P?UP> <RTRUE>)
(<EQUAL? ,HERE ,SCRUB ,SCRUB-2> <RFALSE>)
(<VERB? CLIMB-DOWN> <DO-WALK ,P?DOWN> <RTRUE>)>>
<ROUTINE UP-A-TREE-EXIT ()
<COND (<OR <IN? ,SPACESUIT ,WINNER>
<IN? ,JUNK-SPACESUIT ,WINNER>>
<TELL "You can't climb with that bulky suit." CR>
<RFALSE>)
(ELSE ,UP-A-TREE)>>
<ROUTINE UP-A-TREE-FCN (RARG)
<COND (<==? .RARG ,M-BEG>
<COND (<VERB? DROP THROW>
<MOVE ,PRSO ,BASE-OF-TREE>
<TELL
"The " D ,PRSO " drops out of sight." CR>)
(<VERB? FLY>
<JIGS-UP
"You aren't a bird, so you plummet rather than soar.">)
(<VERB? LEAP>
<JIGS-UP
"Gravity is low here, but not that low, so your jump is fatal.">)>)>>
<ROUTINE TREETOP-FCN (RARG)
<COND (<==? .RARG ,M-BEG>
<COND (<VERB? DROP THROW>
<MOVE ,PRSO ,BASE-OF-TREE>
<TELL
"The " D ,PRSO " drops out of sight." CR>)
(<VERB? FLY>
<JIGS-UP
"You aren't a bird, so you plummet rather than soar.">)
(<VERB? LEAP>
<TELL
"Gravity is almost non-existent here, so your jump easily carries
you to the hatch of the drive bubble." CR>
<CRLF>
<GOTO ,DRIVE-BUBBLE-ENTRANCE>)>)>>
<ROUTINE DRIVE-BUBBLE-ENTRANCE-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"You are floating (clinging?) outside the drive bubble, a crystalline
half-sphere covering the aft end of the artifact's axis of rotation.
Small knobs like handholds lead up the surface of the bubble, away from the
end of the cylinder. The drive bubble is transparent and through it you can
see the controls for the main engines of the artifact, which must be aft of
here. The only way in is a hatch which is ">
<COND (<FSET? ,DRIVE-BUBBLE-HATCH ,OPENBIT>
<TELL "open.">)
(ELSE <TELL "closed.">)>
<TELL " Beside the hatch is a silver slot">
<COND (<IN? ,SILVER-KEY ,SILVER-SLOT>
<TELL " containing a silver rod">)>
<TELL "." CR>)
(<==? .RARG ,M-BEG>
<COND (<VERB? DROP THROW> <BOMBS-AWAY>)
(ELSE
<SWAN-DIVE ,DRIVE-BUBBLE>)>)>>
<ROUTINE SWAN-DIVE (BUB)
<COND (<OR <VERB? LEAP>
<AND <VERB? PUSH> <==? ,PRSO .BUB>>>
<JIGS-UP
"Gravity is very light here and you practically zoom into the air.
Unfortunately gravity is not entirely non-existent, so eventually you begin
to fall, faster and faster, in a lovely curve produced by the rotation of the
artifact. You make a gorgeous but fatal swan dive into the surface.">)>>
<ROUTINE DRIVE-BUBBLE-FCN ()
<COND (<VERB? CLIMB-UP CLIMB-ON BOARD> <DO-WALK ,P?UP> <RTRUE>)>>
<ROUTINE CONTROL-BUBBLE-FCN ()
<COND (<VERB? CLIMB-UP CLIMB-ON BOARD> <DO-WALK ,P?UP> <RTRUE>)>>
<ROUTINE OUT-OF-REACH () <TELL "It's out of reach above you." CR>>
<ROUTINE DRIVE-BUBBLE-ROOM-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"The drive bubble is on the axis of rotation at the aft end of the artifact,
so there is no \"gravity\" here. It is transparent and you can see the tips
of the tallest trees of the forest beyond. Far off, at the opposite end of
the axis, is another bubble much like this one. ">
<COND (<IN? ,WHITE-KEY ,WHITE-SLOT>
<TELL
"The room's gray walls are covered with traceries of white outlining
controls, buttons, dials, and indicators. In addition, a black slot
surrounded by an ominous dead-black circle is next to a white slot
containing a white rod.">)
(ELSE
<TELL
"The room is a featureless gray except for one small white slot.">)>
<TELL " One way out is the hatch, which is ">
<COND (<FSET? ,DRIVE-BUBBLE-HATCH ,OPENBIT>
<TELL "open.">)
(ELSE <TELL "closed.">)>
<CRLF>)
(<==? .RARG ,M-BEG>
<BUBBLE-BOUNCE>)>>
<ROUTINE BUBBLE-BOUNCE ()
<COND (<AND <VERB? WALK> <EQUAL? ,PRSO ,P?UP ,P?NORTH>>
<TELL
"You can't walk in that direction, as there is no gravity here. You could
jump, perhaps..." CR>)
(<VERB? LEAP>
<TELL
"You push off the floor, and because there is no weight you zoom into the air
and rebound against the transparent surface of the bubble!" CR>)>>
<ROUTINE WHITE-KEY-FCN ()
<COND (<AND <VERB? TAKE> <IN? ,WHITE-KEY ,WHITE-SLOT>>
<REMOVE ,BLACK-SLOT>
<FCLEAR ,WHITE-KEY ,NDESCBIT>
<MOVE ,WHITE-KEY ,WINNER>
<TELL
"When you remove the rod, the displays fade and the wall becomes
featureless gray, except for the white slot." CR>)
(<AND <VERB? PUT>
<TRYTAKE>
<==? ,PRSO ,WHITE-KEY>
<==? ,PRSI ,WHITE-SLOT>>
<FSET ,WHITE-KEY ,TOUCHBIT>
<FSET ,WHITE-KEY ,NDESCBIT>
<MOVE ,BLACK-SLOT ,DRIVE-BUBBLE-ROOM>
<MOVE ,WHITE-KEY ,WHITE-SLOT>
<TELL
"As you insert the rod, the walls come alive with a white tracery of controls,
dials, and gauges. In addition, a black slot surrounded by an ominous
dead-black circle appears." CR>)>>
<ROUTINE ON-DRIVE-BUBBLE-FCN (RARG)
<COND (<==? .RARG ,M-BEG>
<ON-BUBBLE-FCN ,DRIVE-BUBBLE ,AXIS-1>)>>
<ROUTINE SILVER-SLOT-CONT ()
<HATCH-CLOSE ,DRIVE-BUBBLE-HATCH>>
<ROUTINE GOLD-SLOT-CONT ()
<HATCH-CLOSE ,CONTROL-BUBBLE-HATCH>>
<ROUTINE HATCH-CLOSE (HATCH "AUX" CONT)
<COND (<VERB? TAKE>
<SET CONT <FIRST? .HATCH>>
<COND (<TRYTAKE>
<TELL
"The " D .HATCH " closes silently." CR>
<FCLEAR .CONT ,NDESCBIT>
<FCLEAR .HATCH ,OPENBIT>)>)>>
<ROUTINE SILVER-SLOT-FCN ()
<SLOT-DOOR ,SILVER-SLOT ,SILVER-KEY ,DRIVE-BUBBLE-HATCH>>
<ROUTINE GOLD-SLOT-FCN ()
<SLOT-DOOR ,GOLD-SLOT ,GOLD-KEY ,CONTROL-BUBBLE-HATCH>>
<ROUTINE SLOT-DOOR (SLOT KEY DOOR)
<COND (<VERB? PUT>
<COND (<==? ,PRSO .KEY>
<COND (<NOT <FSET? .DOOR ,OPENBIT>>
<FSET .DOOR ,OPENBIT>
<FSET .KEY ,NDESCBIT>
<MOVE .KEY .SLOT>
<TELL
"The " D ,PRSO " slides into the slot and the " D .DOOR " opens." CR>)
(ELSE
<ALREADY "open">)>)
(<FSET? ,PRSO ,KEYBIT>
<WRONG-KEY>)
(ELSE
<WONT-FIT>)>)>>
<ROUTINE WHITE-SLOT-FCN ()
<COND (<VERB? PUT>
<COND (<NOT <TRYTAKE>> <RTRUE>)
(<NOT <FSET? ,PRSO ,KEYBIT>>
<TELL "You can't do that." CR>)
(<==? ,PRSO ,WHITE-KEY>
<RFALSE>)
(<IN? ,WHITE-KEY ,WHITE-SLOT>
<TELL
"The white crystal rod is already in the slot." CR>)
(<FSET? ,PRSO ,KEYBIT>
<WRONG-KEY>)>)>>
<ROUTINE BLACK-SLOT-FCN ()
<COND (<VERB? PUT>
<COND (<NOT <TRYTAKE>> <RTRUE>)
(<NOT <FSET? ,PRSO ,KEYBIT>>
<TELL "You can't do that." CR>)
(<==? ,PRSO ,BLACK-KEY>
<TELL
"The rod slides easily into the slot, and as it does, the lights go out in
the bubble. Outside, you can see dead
black night settling over everything. An expressionless voice speaks inside
your head: \"Emergency shutoff mechanism activated...\" The voice gets quieter
and quieter, and finally silence rules over all.|
">
<FINISH>)
(<FSET? ,PRSO ,KEYBIT>
<WRONG-KEY>)>)>>
\
<ROUTINE CONTROL-BUBBLE-ENTRANCE-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"You are floating outside a 100 meter crystal dome which protrudes from the
fore end of the cylinder. Inside, you can discern shadowy mechanisms and odd
constructions. Near you is an entrance which is ">
<COND (<FSET? ,CONTROL-BUBBLE-HATCH ,OPENBIT>
<TELL "open.">)
(ELSE <TELL "closed.">)>
<TELL
" A small slot surrounded by gold crystal is next to the hatch.">
<COND (<IN? ,GOLD-KEY ,GOLD-SLOT>
<TELL " The slot contains a gold rod.">)>
<TELL " Small knobs
which might make good handholds dot the surface of the bubble from the axis
to the hatch." CR>)
(<==? .RARG ,M-BEG>
<COND (<VERB? DROP THROW> <BOMBS-AWAY>)
(ELSE <SWAN-DIVE ,CONTROL-BUBBLE>)>)>>
<ROUTINE CONTROL-BUBBLE-ROOM-FCN (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"This room seems to be the main control room of the artifact.
The control bubble itself is transparent and you can look out upon the
interior of the artifact. Far off, mostly hidden by the tallest trees of the
forest, is the matching drive bubble. One way out is the hatch, which is ">
<COND (<FSET? ,CONTROL-BUBBLE-HATCH ,OPENBIT>
<TELL "open.">)
(ELSE <TELL "closed.">)>
<CRLF>
<TELL "The walls are gray ">
<COND (<IN? ,CLEAR-KEY ,CLEAR-SLOT>
<TELL "except for five small
color-coded slots (pink, brown, violet, green, and blue) ">
<COND (<IN? ,CLEAR-SLOT ,HERE>
<TELL "surrounding
a small clear one.">)
(ELSE <TELL "arranged in a pentagon.">)>)
(ELSE
<TELL "except for a single small slot
surrounded by clear crystal.">)>
<CRLF>
<SLOTS-AND-SPOTS>
<COND (<IN? ,VIEW-SELECT ,HERE>
<APPLY <GETP ,VIEW-SELECT ,P?ACTION> ,M-OBJDESC>)>
<RTRUE>)
(<==? .RARG ,M-BEG>
<BUBBLE-BOUNCE>)>>
<ROUTINE PLANTER-FCN ()
<COND (<VERB? EXAMINE>
<AS-ADVERTISED>)
(<VERB? DIG>
<TELL "You find nothing of interest." CR>)>>
<ROUTINE METAL-BAND-EXIT ()
<COND (<NOT <FSET? ,GRASSLAND ,TOUCHBIT>>
<ENABLE <QUEUE I-HUNTERS 2>>)>
<TELL
"You climb a long vertical shaft for a considerable distance. The shaft opens
into a gigantic space which obviously occupies most of the interior of the
artifact. The area is " <COND (,NIGHT? "dimly")
(T "brightly")>
" lit and has
an interesting geography...|
" CR>
,GRASSLAND>
<GLOBAL HUNTER-COUNT 0>
<GLOBAL HUNTER-TABLE
<LTABLE
"Weasel-like aliens in a hunting party enter the grassland."
"Weasels are stalking the unicorn herd."
"The weasels attack the herd; one straggler is confused and the weasels
converge. Speared, the unicorn falls dead."
"Weasels are butchering a unicorn."
"Weasel-like aliens are departing after a unicorn hunt.">>
<ROUTINE SEES-HUNTERS? ()
<OR <EQUAL? ,HERE ,GRASSLAND ,GRASSLAND-2 ,FORE-END>
<EQUAL? ,HERE ,METAL-BAND ,METAL-BAND-2 ,FORE-END-2>
<EQUAL? ,HERE ,SCRUB ,SCRUB-2>>>
<ROUTINE I-HUNTERS ()
<COND (<0? ,HUNTER-COUNT>
<COND (<AND <PROB 40> <SEES-HUNTERS?>>
<SETG HUNTER-COUNT 1>)
(T <ENABLE <QUEUE I-HUNTERS 2>>)>)>
<COND (<NOT <0? ,HUNTER-COUNT>>
<COND (<SEES-HUNTERS?>
<TELL "There is activity ">
<COND (<EQUAL? ,HERE ,GRASSLAND>
<TELL "above, across the cylinder: ">)
(<EQUAL? ,HERE ,GRASSLAND-2>
<TELL "nearby: ">)
(ELSE
<TELL
"on the grassy plain: ">)>
<TELL <GET ,HUNTER-TABLE ,HUNTER-COUNT> CR>)>
<COND (<L? ,HUNTER-COUNT <GET ,HUNTER-TABLE 0>>
<SETG HUNTER-COUNT <+ ,HUNTER-COUNT 1>>
<ENABLE <QUEUE I-HUNTERS 2>>)
(ELSE
<SETG HUNTER-COUNT 0>
<ENABLE <QUEUE I-HUNTERS 200>>)>)>>
<ROUTINE UNICORNS-FCN ()
<COND (<VERB? EXAMINE>
<COND (<==? ,HERE ,GRASSLAND>
<TELL
"They are over on the other side of the cylinder." CR>)
(T
<TELL
"They are nearby, cropping grass." CR>)>)
(<VERB? FOLLOW> <TELL "They aren't going anywhere." CR>)
(<VERB? ZAP>
<COND (<CAN-ZAP?>
<TELL
"Many unicorns are incinerated; the rest scatter in terror, then slowly
form back into a herd some distance away." CR>
<SPOILED-HUNT>)>)
(ELSE
<TELL
"The creatures move off as you approach, so you can't get very close to
them." CR>
<SPOILED-HUNT>)>>
<ROUTINE SPOILED-HUNT ()
<COND (<AND <G? ,HUNTER-COUNT 0>
<L? ,HUNTER-COUNT 4>>
<SETG HUNTER-COUNT 0>
<ENABLE <QUEUE I-HUNTERS 200>>
<TELL
"You have disturbed the hunters, who are annoyed, and the unicorns, who are
now more wary. The hunt is spoiled." CR>)>
<RTRUE>>
<GLOBAL NIGHT? <>>
<ROUTINE I-NIGHT ()
<ENABLE <QUEUE I-NIGHT 128>>
<COND (<OR <SEES-HUNTERS?>
<EQUAL? ,HERE ,FOREST ,BASE-OF-TREE ,UP-A-TREE>
<EQUAL? ,HERE
,TREETOP-ROOM ,DRIVE-BUBBLE-ENTRANCE
,CONTROL-BUBBLE-ENTRANCE>
<EQUAL? ,HERE ,AXIS-1 ,AXIS-2 ,AXIS-3>
<EQUAL? ,HERE ,ON-DRIVE-BUBBLE ,ON-CONTROL-BUBBLE>>
<COND (,NIGHT?
<TELL
"The lights come on: it is now full daylight." CR>)
(ELSE
<TELL
"The lights dim: it is now nighttime. There is still enough light to
see by; it's like a clear, moonlit night back on earth." CR>)>)>
<SETG NIGHT? <NOT ,NIGHT?>>>
<ROUTINE BOMBS-AWAY ("AUX" A B)
<COND (<EQUAL? ,PRSO ,RED-DISK ,BLUE-DISK>
<DISK-SWITCH ,PRSO T>)>
<COND (<EQUAL? ,PRSI ,DRIVE-BUBBLE ,CONTROL-BUBBLE>
<MOVE ,PRSO
<COND (<==? ,PRSI ,DRIVE-BUBBLE> ,FOREST)
(ELSE ,FORE-END)>>
<TELL
"Throwing the " D ,PRSO " provides some impulse away from the " D ,PRSI ",
but air resistance slows you quickly." CR>)
(ELSE
<COND (<EQUAL? ,HERE
,ON-DRIVE-BUBBLE
,DRIVE-BUBBLE-ENTRANCE>
<SET A ,FOREST> <SET B ,BASE-OF-TREE>)
(<==? ,HERE ,AXIS-1>
<SET A ,SCRUB> <SET B ,SCRUB-2>)
(<==? ,HERE ,AXIS-2>
<SET A ,GRASSLAND> <SET B ,GRASSLAND-2>)
(<==? ,HERE ,AXIS-3>
<SET A ,METAL-BAND> <SET B ,METAL-BAND-2>)
(<EQUAL? ,HERE
,ON-CONTROL-BUBBLE
,CONTROL-BUBBLE-ENTRANCE>
<SET A ,FORE-END> <SET B ,FORE-END-2>)>
<MOVE ,PRSO <COND (<PROB 50> .A) (ELSE .B)>>
<TELL
"The " D ,PRSO " sails away, drifting in a long arc towards the ground." CR>)>>
<ROUTINE ON-BUBBLE-FCN (BUB DEST)
<COND (<VERB? DROP THROW> <BOMBS-AWAY>)
(<OR <VERB? LEAP>
<AND <VERB? PUSH> <==? ,PRSO .BUB>>>
<TELL
"You push against the surface of the bubble, and because there is no weight
here, you shoot into the air and away along the axis!" CR>
<CRLF>
<GOTO .DEST>
<RTRUE>)>>
<ROUTINE ON-CONTROL-BUBBLE-FCN (RARG)
<COND (<==? .RARG ,M-BEG>
<ON-BUBBLE-FCN ,CONTROL-BUBBLE ,AXIS-3>)>>
<ROUTINE AXIS-FCN ("OPTIONAL" (RARG <>))
<COND (<==? .RARG ,M-BEG>
<COND (<VERB? WALK>
<TELL
"You are floating in midair near the axis of rotation. Given this fact,
it's hard to see how you are going to walk anywhere." CR>)
(<VERB? DROP THROW>
<BOMBS-AWAY>)
(<VERB? LEAP>
<TELL
"That was a good idea when you had something to push against. Here it
has no effect." CR>)>)>>
<ROUTINE JATO ("AUX" TARGET)
<SET TARGET ,PRSI>
<COND (<NOT <EQUAL? .TARGET ,DRIVE-BUBBLE ,CONTROL-BUBBLE ,GROUND>>
<SET TARGET
<COND (<PROB 40> ,DRIVE-BUBBLE)
(<PROB 40> ,CONTROL-BUBBLE)
(ELSE ,GROUND)>>)>
<TELL
"A blast of orange flame issues from the gun, and the recoil propels you at
an impressive speed through the air.">
<COND (<EQUAL? ,HERE ,DRIVE-BUBBLE-ROOM ,CONTROL-BUBBLE-ROOM>
<TELL
" You hit the bulkhead rather hard. Ouch!" CR>)
(<EQUAL? .TARGET ,DRIVE-BUBBLE ,CONTROL-BUBBLE>
<TELL
" Eventually, air resistance slows you down, but you are still in the
weightless area near the center of the cylinder." CR>
<COND (<==? .TARGET ,DRIVE-BUBBLE>
<CRLF>
<COND (<==? ,HERE ,ON-DRIVE-BUBBLE> <GOTO ,AXIS-1>)
(<==? ,HERE ,AXIS-1> <GOTO ,AXIS-2>)
(<==? ,HERE ,AXIS-2> <GOTO ,AXIS-3>)
(<==? ,HERE ,AXIS-3>
<GOTO ,ON-CONTROL-BUBBLE>)
(<==? ,HERE ,ON-CONTROL-BUBBLE>
<TELL
"You are still outside the control bubble." CR>)>)
(ELSE
<CRLF>
<COND (<==? ,HERE ,ON-DRIVE-BUBBLE>
<TELL
"You are still outside the drive bubble." CR>)
(<==? ,HERE ,AXIS-1>
<GOTO ,ON-DRIVE-BUBBLE>)
(<==? ,HERE ,AXIS-2> <GOTO ,AXIS-1>)
(<==? ,HERE ,AXIS-3> <GOTO ,AXIS-2>)
(<==? ,HERE ,ON-CONTROL-BUBBLE>
<GOTO ,AXIS-3>)>)>
<RTRUE>)
(<==? .TARGET ,GROUND>
<JIGS-UP
" You are now some distance from the axis of the cylinder. Air resistance and
centripetal force take hold and you start to fall, faster and faster, in a
lovely arc that ends as you splatter against the ground.">)>>
<ROUTINE OBSERVATORY-FCN (RARG "AUX" X)
<COND (<==? .RARG ,M-LOOK>
<SET X <FIRST? ,SLIDE-PROJECTOR>>
<TELL
"This is the interior part of the artifact's observatory, with an
exit to starboard. There are no telescopes or other instruments visible">
<COND (<OR <NOT .X> <FSET? .X ,KEYBIT>>
<TELL
", but in the center of the room is an image of space in the vicinity.
Examining the image, you see a tiny model of the solar system. The sun is
a bright dot in the center; Jupiter and Saturn are easily discovered.">
<COND (.X
<TELL
" The colors of the dots are not what you would
expect, though,">
<COND (<IN? ,CLEAR-KEY ,SLIDE-PROJECTOR>
<TELL
" and range throughout the spectrum.">)
(<FSET? .X ,KEYBIT>
<TELL
" as they are filtered through a " D .X ".">)>)>)
(ELSE <TELL ", only a holographic projector.">)>
<CRLF>)>>
<ROUTINE SLIDE-PROJECTOR-FCN ("AUX" X)
<COND (<VERB? EXAMINE>
<SET X <FIRST? ,SLIDE-PROJECTOR>>
<COND (<AND .X <NOT <FSET? .X ,KEYBIT>>>
<TELL
"The projector is a type of laser, currently blocked by a " D .X " from
projecting any light." CR>)
(ELSE
<TELL
"The projector is a type of laser, producing a continuous holographic
view of space outside the artifact. The light issues from the front of
the projector, and is blindingly bright." CR>)>)
(<VERB? LOOK-SAFELY>
<COND (<EQUAL? ,PRSI ,SMOKED-GLASS ,BLACK-KEY>
<TELL
"The light is very bright, but the " D ,PRSI " filters it enough so that
you are not blinded." CR>
<COND (<IN? ,CLEAR-KEY ,SLIDE-PROJECTOR>
<FCLEAR ,CLEAR-KEY ,INVISIBLE>
<TELL
"Inside the projector is a clear crystal rod, which has a prismatic effect
on the light being emitted." CR>)>)
(ELSE
<JIGS-UP
"The light is filtered somewhat by the rod, but not enough, and you are
blinded. You blunder about for a while, end up in a dark place, and are set
upon by grues.">)>)
(<VERB? LOOK-INSIDE>
<JIGS-UP
"The light being emitted is so bright that your retina is scorched and you
are blinded. You blunder about for a while, end up in a dark place, and are
set upon by grues.">)
(<AND <VERB? TAKE> <IN? ,PRSO ,SLIDE-PROJECTOR>>
<MOVE ,PRSO ,WINNER>
<TELL "Taken. ">
<COND (<FSET? ,PRSO ,KEYBIT>
<SCORE-OBJ ,PRSO>
<TELL
"The image displayed is now clear and correctly colored." CR>)
(ELSE
<TELL
"The displayed image becomes visible again." CR>)>)
(<AND <VERB? PUT> <==? ,PRSI ,SLIDE-PROJECTOR>>
<COND (<FIRST? ,PRSI>
<TELL "There is already something there." CR>)
(<==? ,PRSO ,CLEAR-KEY>
<MOVE ,PRSO ,PRSI>
<TELL
"The displayed image is now prismatic and multi-colored." CR>)
(<FSET? ,PRSO ,KEYBIT>
<MOVE ,PRSO ,PRSI>
<TELL
"The displayed image is now filtered through a " D ,PRSO ", and becomes
that color." CR>)
(ELSE <WONT-FIT>)>)
(<VERB? OPEN CLOSE>
<TELL "You can't do that to the " D ,PRSO "." CR>)>>
<ROUTINE LASER-BEAM-FCN ()
<COND (<VERB? EXAMINE>
<TELL
"The beam projects a view of some outside location." CR>)
(<AND <VERB? ZAP> <CAN-ZAP?>>
<TELL
"Zapping a light beam is a waste of time." CR>)
(<VERB? MUNG>
<TELL
"The image vanishes while the beam is broken." CR>)>>
<ROUTINE CANT-DAMAGE ()
<TELL
"It's hard to see how you expect to damage a " D ,PRSO "." CR>>
<ROUTINE CONTROL-SLOT-FCN ("AUX" F)
<COND (<VERB? PUT>
<COND (<OR <NOT <FSET? ,PRSO ,KEYBIT>> <FIRST? ,PRSI>>
<WONT-FIT>
<RTRUE>)
(<SET F <GETP ,PRSI ,P?KEY>>
<COND (<OR <NOT ,SWITCH-ON?>
<NOT <IN? ,CARD ,SLOT>>>
<TELL
"The " D ,PRSI " rejects the " D ,PRSO ", and the slot flashes as if
indicating a fault somewhere in the system." CR>
<RTRUE>)
(<NOT <==? ,PRSO .F>>
<WRONG-KEY>
<RTRUE>)>)>
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,NDESCBIT>
<COND (<AND <==? ,PRSO ,CLEAR-KEY>
<==? ,PRSI ,CLEAR-SLOT>>
<MOVE ,BROWN-SLOT ,HERE>
<MOVE ,PINK-SLOT ,HERE>
<MOVE ,GREEN-SLOT ,HERE>
<MOVE ,BLUE-SLOT ,HERE>
<MOVE ,VIOLET-SLOT ,HERE>
<MOVE ,CLEAR-KEY ,CLEAR-SLOT>
<TELL
"As you insert the clear rod, five other slots appear evenly ranged around
the clear one. These are colored brown, green, blue, violet and pink
respectively." CR>
<RTRUE>)
(<AND <==? ,PRSO ,BROWN-KEY>
<==? ,PRSI ,BROWN-SLOT>>
<SET F ,TARGET-SELECT>)
(<AND <==? ,PRSO ,PINK-KEY>
<==? ,PRSI ,PINK-SLOT>>
<SET F ,VIEW-SELECT>)
(<AND <==? ,PRSO ,GREEN-KEY>
<==? ,PRSI ,GREEN-SLOT>>
<SET F ,SPEED-SELECT>)
(<AND <==? ,PRSO ,BLUE-KEY>
<==? ,PRSI ,BLUE-SLOT>>
<SET F ,EXECUTE-BUTTON>)
(<AND <==? ,PRSO ,VIOLET-KEY>
<==? ,PRSI ,VIOLET-SLOT>>
<SET F ,COURSE-SELECT>)
(ELSE <RFALSE>)>
<MOVE .F ,HERE>
<TELL
"When the " D ,PRSO " is inserted into the " D ,PRSI ", a ghostly image
appears on the wall alongside it">
<COND (<IN? ,CLEAR-SLOT ,CONTROL-BUBBLE-ROOM>
<REMOVE ,CLEAR-SLOT>
<TELL
", but the clear slot and its contents fade from view." CR>)
(ELSE <TELL "." CR>)>
<COND (<EQUAL? .F ,VIEW-SELECT>
<PERFORM ,V?EXAMINE .F>)
(ELSE
<TELL
"The image is a " D .F " which almost seems to project out of the wall." CR>)>
<RTRUE>)
(<VERB? TAKE TAKE-OFF>
<COND (<AND <==? ,PRSO ,CLEAR-KEY>
<IN? ,PRSO ,CLEAR-SLOT>>
<SETG VIEW-STATUS 0>
<SETG TARGET 0>
<SETG COURSE-SHAPE 0>
<SETG SPEED-VALUE 0>
<REMOVE ,VIEW-SELECT>
<REMOVE ,TARGET-SELECT>
<REMOVE ,SPEED-SELECT>
<REMOVE ,COURSE-SELECT>
<REMOVE ,EXECUTE-BUTTON>
<REMOVE ,BROWN-SLOT>
<REMOVE ,PINK-SLOT>
<REMOVE ,GREEN-SLOT>
<REMOVE ,BLUE-SLOT>
<REMOVE ,VIOLET-SLOT>
<MOVE ,CLEAR-KEY ,WINNER>
<TELL
"When you remove the clear rod, the room returns to its original
featureless state." CR>
<RTRUE>)
(<AND <==? ,PRSO ,BROWN-KEY>
<IN? ,PRSO ,BROWN-SLOT>>
<SETG TARGET 0>
<SET F ,TARGET-SELECT>)
(<AND <==? ,PRSO ,PINK-KEY>
<IN? ,PRSO ,PINK-SLOT>>
<SETG VIEW-STATUS 0>
<SETG TARGET 0>
<SETG COURSE-SHAPE 0>
<SETG SPEED-VALUE 0>
<SET F ,VIEW-SELECT>)
(<AND <==? ,PRSO ,GREEN-KEY>
<IN? ,PRSO ,GREEN-SLOT>>
<SETG SPEED-VALUE 0>
<SET F ,SPEED-SELECT>)
(<AND <==? ,PRSO ,BLUE-KEY>
<IN? ,PRSO ,BLUE-SLOT>>
<SET F ,EXECUTE-BUTTON>)
(<AND <==? ,PRSO ,VIOLET-KEY>
<IN? ,PRSO ,VIOLET-SLOT>>
<SETG COURSE-SHAPE 0>
<SET F ,COURSE-SELECT>)
(ELSE <RFALSE>)>
<REMOVE .F>
<MOVE ,PRSO ,WINNER>
<FCLEAR ,PRSO ,NDESCBIT>
<TELL "The " D .F " fades from view as you take the " D ,PRSO>
<COND (<OR <IN? ,BROWN-KEY ,BROWN-SLOT>
<IN? ,BLUE-KEY ,BLUE-SLOT>
<IN? ,GREEN-KEY ,GREEN-SLOT>
<IN? ,PINK-KEY ,PINK-SLOT>
<IN? ,VIOLET-KEY ,VIOLET-SLOT>>
<TELL "." CR>)
(ELSE
<MOVE ,CLEAR-SLOT ,CONTROL-BUBBLE-ROOM>
<TELL
", and a moment later the clear slot and its contents reappear." CR>)>)>>
;"This routine describes the various slots, contents, and corresponding
spots."
<ROUTINE SLOTS-AND-SPOTS ("AUX" (CNT 0) (OFF 0) SCNT TBL)
<COND (<NOT <IN? ,CLEAR-KEY ,CLEAR-SLOT>>
<RTRUE>)
(T
<COND (<IN? ,CLEAR-SLOT ,HERE>
<TELL
"A clear rod is in the clear slot. Of the surrounding slots, ">)
(ELSE
<TELL "Of the colored slots, ">)>
<COND (<IN? ,PINK-KEY ,PINK-SLOT>
<TELL "the pink one contains a pink rod and ">)>
<COND (<IN? ,BROWN-KEY ,BROWN-SLOT>
<SET CNT <+ .CNT 1>>)>
<COND (<IN? ,GREEN-KEY ,GREEN-SLOT>
<SET CNT <+ .CNT 1>>)>
<COND (<IN? ,BLUE-KEY ,BLUE-SLOT>
<SET CNT <+ .CNT 1>>)>
<COND (<IN? ,VIOLET-KEY ,VIOLET-SLOT>
<SET CNT <+ .CNT 1>>)>
<COND (<0? .CNT>
<COND (<IN? ,PINK-KEY ,PINK-SLOT>
<TELL "the others">)
(T
<TELL "all">)>
<TELL " are empty." CR>
<RTRUE>)>
<TELL "the ">
<SET TBL ,SLOT-TABLE>
<SET SCNT .CNT>
<REPEAT ()
<COND (<0? <GET .TBL .OFF>>
<RETURN>)
(<IN? <GET .TBL .OFF> <GET .TBL <+ .OFF 1>>>
<TELL <GET .TBL <+ .OFF 2>>>
<COND (<G? .CNT 2> <TELL ", ">)
(<==? .CNT 2> <TELL " and ">)>
<COND (<L? <SET CNT <- .CNT 1>> 1>
<RETURN>)>)>
<SET OFF <+ .OFF 3>>>
<TELL " rod">
<COND (<==? .SCNT 1>
<TELL " is">)
(T <TELL "s are">)>
<TELL " in place in the like-colored slot">
<COND (<==? .SCNT 1>
<TELL ". Alongside it is a spot">)
(T <TELL "s. Alongside each of those are spots">)>
<TELL " of the same color." CR>)>>
<GLOBAL SLOT-TABLE
<TABLE BLUE-KEY BLUE-SLOT "blue"
GREEN-KEY GREEN-SLOT "green"
VIOLET-KEY VIOLET-SLOT "violet"
BROWN-KEY BROWN-SLOT "brown"
0>>
<GLOBAL VIEW-STATUS 0>
<GLOBAL VIEW-SCREEN-VIEWS
<TABLE "an empty area with a stylized depiction of the artifact itself"
"the inner solar system, from the sun out to Jupiter"
"the entire solar system, including the cometary halo"
"the region near the solar system, not including nearby stars"
"the local interstellar region, including a few nearer stars">>
<GLOBAL COURSE-SHAPE 0>
<GLOBAL TARGET 0>
<GLOBAL COURSES
<LTABLE "in the center of "
"in a parabola looping around "
"in an ellipse surrounding "
"in a circle around ">>
<GLOBAL TARGETS <LTABLE "the Sun" "Mercury" "Venus" "Earth" "Mars" "Jupiter">>
<GLOBAL SPEEDS <LTABLE "slowly" "rapidly">>
<GLOBAL SPEED-VALUE 0>
<ROUTINE VIEW-SELECT-FCN ("OPTIONAL" (RARG <>))
<COND (<OR <==? .RARG ,M-OBJDESC> <VERB? EXAMINE>>
<TELL
"The pink screen includes a small square, a large square, and a display
showing nearby space. This view shows "
<GET ,VIEW-SCREEN-VIEWS ,VIEW-STATUS> ".">
<COND (<AND <==? ,VIEW-STATUS 1>
<NOT <0? ,TARGET>>>
<TELL " The symbol representing "
<GET ,TARGETS ,TARGET>
" is lit.">
<COND (<NOT <0? ,COURSE-SHAPE>>
<TELL
" A line on the display connects the position of the artifact with
that of " <GET ,TARGETS ,TARGET> ", and terminating " <GET ,COURSES ,COURSE-SHAPE> <GET ,TARGETS ,TARGET> ".">
<COND (<NOT <0? ,SPEED-VALUE>>
<TELL " The line is made of dots,
blinking " <GET ,SPEEDS ,SPEED-VALUE> ", starting with the dot at the
artifact and ending at the one next to " <GET ,TARGETS ,TARGET> ".">)>)>)>
<CRLF>)
(<VERB? RUB PUSH>
<COND (<==? ,PRSO ,ZOOM-IN>
<COND (<G? ,VIEW-STATUS 0>
<SETG VIEW-STATUS <- ,VIEW-STATUS 1>>
<TELL "The view screen now shows "
<GET ,VIEW-SCREEN-VIEWS ,VIEW-STATUS>
"."
CR>)
(ELSE <TELL "The view is unchanged." CR>)>)
(<==? ,PRSO ,ZOOM-OUT>
<COND (<L? ,VIEW-STATUS 4>
<SETG VIEW-STATUS <+ ,VIEW-STATUS 1>>
<TELL "The view screen now shows "
<GET ,VIEW-SCREEN-VIEWS ,VIEW-STATUS>
"." CR>)
(ELSE <TELL "The view is unchanged." CR>)>)
(ELSE <TELL
"The display flashes briefly." CR>)>)>>
<ROUTINE TARGET-SELECT-FCN ()
<COND (<VERB? RUB PUSH>
<COND (<AND <IN? ,VIEW-SELECT ,HERE>
<==? ,VIEW-STATUS 1>>
<SETG TARGET <MOD <+ ,TARGET 1> 7>>
<COND (<0? ,TARGET>
<TELL
"Now nothing is highlighted on the view screen." CR>)
(ELSE
<TELL
"The view screen now shows " <GET ,TARGETS ,TARGET> " brightly
highlighted." CR>)>)
(ELSE <SPOT-FLASH>)>)>>
<ROUTINE SPEED-SELECT-FCN ()
<COND (<VERB? RUB PUSH>
<COND (<IN? ,VIEW-SELECT ,HERE>
<COND (<AND <NOT <0? ,COURSE-SHAPE>>
<NOT <0? ,TARGET>>>
<COND (<NOT <IN? ,WHITE-KEY ,WHITE-SLOT>>
<TELL
"The line on the display flashes brightly, insistently, for about five
seconds, and then returns to its former state." CR>
<RTRUE>)>
<SETG SPEED-VALUE <MOD <+ ,SPEED-VALUE 1> 3>>
<COND (<NOT <0? ,SPEED-VALUE>>
<TELL
"The line on the display now consists of dots which flash " <GET ,SPEEDS ,SPEED-VALUE> ", one at a time, starting with a dot at the artifact and concluding at " <GET ,TARGETS ,TARGET> "." CR>)
(ELSE
<TELL
"The line on the display is now a solid line." CR>)>)
(ELSE <SPOT-FLASH>)>)
(ELSE <SPOT-FLASH>)>)>>
<ROUTINE COURSE-SELECT-FCN ()
<COND (<VERB? RUB PUSH>
<COND (<IN? ,VIEW-SELECT ,HERE>
<SETG COURSE-SHAPE <MOD <+ ,COURSE-SHAPE 1> 5>>
<COND (<NOT <0? ,TARGET>>
<COND (<NOT <0? ,COURSE-SHAPE>>
<TELL
"The highlighted image of " <GET ,TARGETS ,TARGET> " now is connected to
that of the artifact. The line terminates " <GET ,COURSES ,COURSE-SHAPE>
<GET ,TARGETS ,TARGET> "." CR>)
(ELSE
<TELL
"A line no longer connects the artifact and " <GET ,TARGETS ,TARGET> "." CR>)>)
(ELSE <SPOT-FLASH>)>)
(ELSE <SPOT-FLASH>)>)>>
<ROUTINE EXECUTE-BUTTON-FCN ("OPTIONAL" (RARG <>))
<COND (<VERB? PUSH RUB>
<COND (<IN? ,VIEW-SELECT ,HERE>
<COND (<AND <NOT <0? ,COURSE-SHAPE>>
<NOT <0? ,TARGET>>
<NOT <0? ,SPEED-VALUE>>
<==? ,VIEW-STATUS 1>>
<COND (<G? ,CONTROL-SCORE 0>
<SCORE-UPD ,CONTROL-SCORE>
<SETG CONTROL-SCORE 0>
<TELL
"All of the displays flash once. There is a sensation of movement
as the artifact positions itself to follow the course you have laid for it."
CR>
<WIN-GAME>)
(ELSE <SPOT-FLASH>)>)
(ELSE <SPOT-FLASH>)>)
(ELSE <SPOT-FLASH>)>)>>
<ROUTINE SPOT-FLASH () <TELL "The spot flashes briefly." CR>>
<GLOBAL CONTROL-SCORE 25>
<ROUTINE WIN-GAME ()
<CRLF>
<COND (<==? ,TARGET 4>
<COND (<EQUAL? ,COURSE-SHAPE 3 4>
<SCORE-UPD 25>
<SETG WON-FLAG T>
<TELL
"The artifact, under your assured control, moves serenely toward Earth, where
the knowledge it contains will immeasureably benefit mankind. Within a few
years, there could be human ships flying out to the stars, and all because of
your daring and cunning...|
|
A holographic projection of a humanoid figure appears before you. The being
is tall, thin, and swathed in shimmering robes. It speaks perfectly but
expressionlessly in your own language. \"Congratulations, you who have
passed our test. You have succeeded where others failed. Your race shall
benefit thereby.\" He smiles. \"I expect to see you in person, someday.\" The
projection fades.|
" CR>)
(ELSE
<TELL
"The artifact approaches Earth, where the plaudits of humanity await you.
Unfortunately, the course you have chosen "
<COND (<==? ,COURSE-SHAPE 1> "rams you
into the planet and you earn the hatred of mankind, not its praises.")
(ELSE "loops you
around the Earth and back into interstellar space, never to return.")>>
<CRLF>)>)
(ELSE
<TELL
"The artifact moves confidently towards " <GET ,TARGETS ,TARGET> ",
but its computer system is smart enough to know where you came from, and
it realizes that you have made the wrong choice. All shipboard systems
shut down, and the rest is silence." CR>)>
<FINISH>>
<ROUTINE ON-ARTIFACT? ()
<COND (<OR <EQUAL? ,HERE ,SPACESHIP-BRIDGE ,SPACESHIP-STORES
,SPACESHIP-QUARTERS>
<EQUAL? ,HERE ,SPACESHIP-AIRLOCK ,DEEP-SPACE ,RED-DOCK>
<EQUAL? ,HERE ,BLUE-DOCK ,YELLOW-DOCK ,GREEN-DOCK>
<EQUAL? ,HERE ,OUTER-SPACE>>
<RFALSE>)
(ELSE <RTRUE>)>>
<ROUTINE CARD-F ()
<COND (<IN? ,CARD ,SLOT>
<COND (<AND <VERB? ZAP> <CAN-ZAP?>>
<SETG SWITCH-ON? <>>
<SETG MELTED? T>
<RFALSE>)
(<AND <VERB? TAKE> ,SWITCH-ON?>
<TELL
"You get a giant shock as you try to take it." CR>)>)>>
<ROUTINE ROD-RACK-FCN ()
<COND (<AND <VERB? TAKE> <IN? ,PRSO ,ROD-RACK>>
<TELL
"When you take the " D ,PRSO ", the hole it was in closes up as though it
had never existed." CR>
<MOVE ,PRSO ,WINNER>
<RTRUE>)
(<AND <VERB? PUT> <==? ,PRSI ,ROD-RACK>>
<COND (<IN? ,PRSO ,ROD-RACK>
<TELL "It's already there." CR>)
(<NOT <TRYTAKE>> <RTRUE>)
(<FSET? ,PRSO ,KEYBIT>
<MOVE ,PRSO ,ROD-RACK>
<SCORE-OBJ ,PRSO>
<TELL
"The " D ,PRSO " is inserted, and immediately another hole opens
beside it." CR>)
(ELSE
<WONT-FIT>)>)>>
<ROUTINE HATCH-DOOR-F ()
<COND (<VERB? OPEN CLOSE>
<TELL "You can't manually open or close the hatch." CR>)>>
<ROUTINE SPEAR-F ("AUX" OBJ)
<COND (<==? ,HERE ,NEST-CAGE> <SET OBJ ,RAT-ANT>)
(T <SET OBJ ,ALIENS>)>
<COND (<VERB? TAKE>
<TELL
"Every " D .OBJ " regards you with some suspicion and won't give you
a weapon." CR>)
(<VERB? ZAP>
<PERFORM ,V?ZAP .OBJ>
<RTRUE>)>>
<ROUTINE HUTS-F ()
<COND (<VERB? ZAP>
<TELL "A few huts are destroyed; many remain." CR>
<SETG ALIENS-FRIENDLY? <>>)
(T <EX-CHECK>)>>
<ROUTINE AS-ADVERTISED ()
<TELL "The " D ,PRSO " is as described." CR>>
<ROUTINE WALL-F ()
<COND (<AND <EQUAL? ,HERE ,FORE-END ,FORE-END-2>
<VERB? CLIMB-FOO CLIMB-UP CLIMB-ON>>
<TELL "The wall is unscalable!" CR>)>>
<ROUTINE DISTANT-BUBBLE-F ()
<COND (<VERB? LOOK-INSIDE>
<TELL "No details are visible." CR>)
(ELSE
<EX-CHECK>)>>
<ROUTINE EX-CHECK ()
<COND (<VERB? EXAMINE> <AS-ADVERTISED>)>>
<ROUTINE VEGGIES-F ()
<COND (<VERB? EAT> <TELL "Yechh!" CR>)
(T <EX-CHECK>)>>
<ROUTINE DRIVE-CONTROLS-F ()
<COND (<EX-CHECK> <RTRUE>)
(<VERB? ZAP> <RFALSE>)
(T <TELL
"You can't do anything with them." CR>)>>
<ROUTINE CAGES-F ()
<EX-CHECK>>
<ROUTINE TOTEMS-F ()
<COND (<EX-CHECK> <RTRUE>)
(<VERB? EAT> <VEGGIES-F>)
(T <TELL "It would be impolite to fool with these." CR>)>>
<ROUTINE KNOBS-F ()
<COND (<VERB? TAKE>
<TELL "It is firmly attached." CR>)
(<VERB? REACH CLIMB-UP CLIMB-DOWN CLIMB-FOO CLIMB-ON>
<COND (<EQUAL? ,HERE ,DRIVE-BUBBLE-ENTRANCE
,CONTROL-BUBBLE-ENTRANCE>
<DO-WALK ,P?UP>)
(T <DO-WALK ,P?DOWN>)>
<RTRUE>)>>