4278 lines
138 KiB
Plaintext
4278 lines
138 KiB
Plaintext
"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 does the routine tasks of navigation and life support.
|
||
A control couch is mounted before a control panel and 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 the noise any more.\"" CR>)>)
|
||
(<AND .HEAR? <==? ,MOVES 10>>
|
||
<SETG COMPUTER-ON T>
|
||
<TELL
|
||
"An expressionless but nonetheless surly voice issues from the computer:
|
||
\"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
|
||
"Set a course by telling the computer the 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 the manual for the proper computer operating procedure." 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 moment. The computer speaks: ">
|
||
<SETG GIVE-UP <FIND-DESTINATION ,KNOWN-LOCS ,KNOWNS>>
|
||
<COND (,GIVE-UP
|
||
<TELL
|
||
"\"Navigational program for " D ,GIVE-UP " is ready. Giving up,
|
||
huh? Figures, just when we get a good strike. ">)
|
||
(<AND <SETG DESTINATION
|
||
<FIND-DESTINATION ,MASS-LOCS ,MASSES>>
|
||
<==? ,DESTINATION ,MASS>>
|
||
<TELL
|
||
"\"Sequence 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 see
|
||
nothing 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 a standard control panel for this class of single-passenger mining
|
||
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. \"Do you really want to touch the controls
|
||
just now? Not to impugn your piloting ability, but shouldn't I 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)
|
||
<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? THROUGH>
|
||
<TELL "There is glass in that porthole, dummy!" CR>)
|
||
(<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 hard 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 TX 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 TX <GETPT ,HERE .P>>
|
||
<SET L <PTSIZE .TX>>
|
||
<COND (<OR <EQUAL? .L ,UEXIT>
|
||
<AND <EQUAL? .L ,CEXIT>
|
||
<VALUE <GETB .TX ,CEXITFLAG>>>
|
||
<AND <EQUAL? .L ,DEXIT>
|
||
<FSET? <GETB .TX ,DEXITOBJ>
|
||
,OPENBIT>>>
|
||
<SET ROOM <GETB .TX 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
|
||
you'll just 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 fast 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 ", remember?\"" 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, rotating artifact.\"" 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 haven't 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, but my programming impels me to come back on if
|
||
anything 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. You'd better brace yourself.\"">
|
||
|
||
<GLOBAL ROPES-OFF
|
||
"\"I wouldn't try leaving unless you can get those ropes off me.\"">
|
||
|
||
<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 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.">>
|
||
|
||
<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. It would be tedious to continue,
|
||
as " D ,GIVE-UP " has no prospects as a locale for quantum black holes, so
|
||
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 half a 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. Awaiting 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.
|
||
Obviously, 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 below, the features of a different area become
|
||
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."
|
||
"This area 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 Starcross, 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
|
||
artifact's speed of rotation. 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 briefly, then rotates its \"ears\" in your
|
||
direction as you take 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 <NOT <IN? ,MOUSE ,HERE>>
|
||
<OR <EQUAL? ,GLOBAL-MOUSE ,PRSO ,PRSI>
|
||
<EQUAL? ,MOUSE ,PRSO ,PRSI> ;"CHOMPING AGAIN">>
|
||
<COND (<VERB? FOLLOW>
|
||
<COND (<NOT ,LIT>
|
||
<TELL "It's too dark to follow the mouse." CR>)
|
||
(,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? EMPTY>
|
||
<COND (<ROB ,MOUSE ,WINNER>
|
||
<TELL "You get some booty!" CR>)>)
|
||
(<VERB? EXAMINE LOOK-INSIDE>
|
||
<COND (<VERB? EXAMINE>
|
||
<TELL
|
||
"The maintenance mouse is a boxy machine with a large receptacle on top in
|
||
which garbage it collects can be stored. It is buzzing around cleaning the
|
||
area, 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? LOOK-UNDER> <TELL "There is no dirt there." CR>)
|
||
(<VERB? BOARD>
|
||
<TELL
|
||
"The mouse buzzes piteously from the overload until you get back off.
|
||
It only wants to collect small pieces of debris." 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 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 ". The device stops in its tracks and
|
||
buzzes briefly, allowing you 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, which
|
||
closes and becomes nearly invisible." 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 collects 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) TX 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 to climb a tree, but fails dismally." 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 TX <GETPT .H .P>>
|
||
<SET L <PTSIZE .TX>>
|
||
<COND (<OR <EQUAL? .L ,UEXIT>
|
||
<AND <EQUAL? .L ,CEXIT>
|
||
<VALUE <GETB .TX ,CEXITFLAG>>>>
|
||
<COND (<OR <NOT .D> <PROB 50>>
|
||
<COND (<IN? ,MOUSE ,HERE>
|
||
<SETG MFOLLOW .P>)>
|
||
<SET D <GETB .TX ,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 except making 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 EMPTY>
|
||
<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
|
||
"You have searched through part of the bin, but have found nothing of
|
||
interest." 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 chute seems bottomless and warm air rises from it." CR>)
|
||
(<AND <VERB? DROP> <==? ,PRSI ,PSEUDO-OBJECT>>
|
||
<COND (<IDROP>
|
||
<COND (<AND <EQUAL? ,PRSO ,SPACESUIT ,SAFETY-LINE>
|
||
<APPLY <GETP ,PRSO ,P?ACTION>>>
|
||
<RTRUE>)>
|
||
<REMOVE ,PRSO>
|
||
<TELL
|
||
"The " D ,PRSO " falls down the chute and disappears." CR>)
|
||
(ELSE <RTRUE>)>)
|
||
(<VERB? CLIMB-DOWN THROUGH>
|
||
<JIGS-UP
|
||
"The chute leads straight to the input hopper of a fusion reactor which gets
|
||
some of its power from trash. It's 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 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 ZAP>
|
||
<JIGS-UP
|
||
"Bad idea. The spider tears you apart with two of its arms.">)
|
||
(<IN? ,TAPE-PLAYER ,SPIDER>
|
||
<SETG P-CONT <>>
|
||
<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 and discovers the controls. A random
|
||
song begins playing. Agitated, he fiddles with the controls again, and a
|
||
lecture begins. 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 pouch and comes up with something. \"Perhaps
|
||
you may find some use for 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, engrossed in the tape library, pays no attention to you.">
|
||
|
||
<ROUTINE SPIDER-GREETING ()
|
||
<SETG TALKED? T>
|
||
<TELL
|
||
"The spider draws forth an object from a wire clump. He fiddles with it and
|
||
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 failed to
|
||
control the artifact before it left his system, and has been stranded here
|
||
for centuries. He sighs. \"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 encompassing part of 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 strange devices, most 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
|
||
<SETG UNDER-GLOBE <>>
|
||
<SETG WAS-UNDER-GLOBE <>>
|
||
<TELL
|
||
"The " D ,PRSI " activates as the " D ,PRSO " touches it. It disappears
|
||
for a fraction of a second, then a 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 apparatus that beams some sort of beam
|
||
directly at the silvery globe." CR>)
|
||
(<AND <VERB? ZAP> <CAN-ZAP?>>
|
||
<TELL
|
||
"The projector, of the sturdiest construction, is unscathed." CR>)
|
||
(<VERB? MUNG>
|
||
<TELL
|
||
"The projector is made 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. The inner door
|
||
leading up to the interior is " <DDESC .INNER> ", and the outer door leading
|
||
down to the surface 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
|
||
"A safety interlock prevents you from opening both doors of the airlock
|
||
simultaneously." 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 ,ACADEMY-DEATH>)>
|
||
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, including
|
||
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 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 far beyond 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 into space and eventually run out of air." CR>
|
||
<COND (<PROB 40>
|
||
<TELL
|
||
"So far you've 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 pull yourself back into the airlock.|" 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, giving you a panoramic view of
|
||
its surface. Unfortunately you will soon 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 force of the blast slows your recession from the artifact, but not
|
||
enough. You continue to drift away, and eventually run out of air.">)>)>>
|
||
|
||
<ROUTINE THROW-AWAY ()
|
||
<COND (<IDROP>
|
||
<COND (<AND <EQUAL? ,PRSO ,SPACESUIT ,SAFETY-LINE>
|
||
<APPLY <GETP ,PRSO ,P?ACTION>>>
|
||
<RTRUE>)>
|
||
<REMOVE ,PRSO>
|
||
<TELL "The " D ,PRSO " sails away into space." CR>)
|
||
(ELSE <RTRUE>)>>
|
||
|
||
<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 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>
|
||
<COND (,IN-ARTIFACT? <TELL "It's all around!" CR>)
|
||
(ELSE <TELL "It's right here.!" 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 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 PUT>
|
||
<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 TAKE>
|
||
<COND (<OR ,THIS-END ,THAT-END>
|
||
<TELL
|
||
"You should detach it first." CR>)>)>>
|
||
|
||
<GLOBAL DOOR-SOLVED? <>>
|
||
|
||
<ROUTINE CORIOLIS ()
|
||
<COND (<VERB? DROP THROW>
|
||
<COND (<IDROP>
|
||
<COND (<AND <EQUAL? ,PRSO ,SPACESUIT ,SAFETY-LINE>
|
||
<APPLY <GETP ,PRSO ,P?ACTION>>>
|
||
<RTRUE>)>
|
||
<REMOVE ,PRSO>
|
||
<TELL
|
||
"As the " D ,PRSO " leaves your hand, it is thrown into space by the rotation
|
||
of the artifact." CR>)
|
||
(ELSE <RTRUE>)>)>>
|
||
|
||
<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 could be 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 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 finally
|
||
a small one which sticks out quite far." 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 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
|
||
"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
|
||
" a distance somewhat nearer the center than 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 into space as far as your safety line allows, and
|
||
then back again." CR>)
|
||
(ELSE
|
||
<ENABLE <QUEUE I-SUFFOCATE 5>>
|
||
<TELL
|
||
"You fly into space like a super-hero. Unfortunately, you keep going
|
||
indefinitely, and 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 ,ACADEMY-DEATH>)>)
|
||
(T <DOOR-OPENS>)>
|
||
T)>)
|
||
(<NOT <FSET? ,PRSO ,OPENBIT>>
|
||
<ALREADY "closed">)
|
||
(ELSE
|
||
<FCLEAR ,PRSO ,OPENBIT>
|
||
<AIR-HERE>)>>
|
||
|
||
<GLOBAL ACADEMY-DEATH "Didn't they teach you anything in the Academy? You
|
||
can't breathe vacuum! The process of dying in this way is very painful but
|
||
at least relatively short.">
|
||
|
||
<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 aliens, 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 is unclimbable." 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>)
|
||
(<FSET? ,VIOLET-KEY ,TOUCHBIT>
|
||
<JIGS-UP
|
||
"Startled aliens recognize you as the desecrator of their sacred place!
|
||
They attack and overwhelm you by their sheer numbers.">)>)
|
||
(<==? .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 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.
|
||
Only the helmet and scraps of the body material remain." 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. 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>
|
||
<TELL "The hunting party scatters." CR>)>
|
||
<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 a 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 vaporized by the blast! Fortunately, the chief, 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.">)
|
||
(<IN? ,SPACESUIT ,CHIEF>
|
||
<TELL "various objects.">)
|
||
(ELSE <TELL "you.">)>
|
||
<CRLF>)>
|
||
<ENABLE <QUEUE I-CHIEF 2>>
|
||
<RTRUE>)
|
||
(<IN? ,CHIEF ,GREEN-THREE>
|
||
<TELL
|
||
"The chief grins, exposing his pointy 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. A head peeks
|
||
through the door. It's a weasel! He roars, and soon dozens of the aliens
|
||
surround you. The rest, alas, is too gory to describe.">)>)
|
||
(<AND <VERB? ZAP> <CAN-ZAP?>>
|
||
<SETG ALIENS-FRIENDLY? <>>
|
||
<JIGS-UP
|
||
"The skeleton is destroyed by the blast! The aliens, hearing it, rush in and
|
||
skewer 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 resemble crosses between a rat and an ant.
|
||
They are multi-legged with chitinous shells and pincers around their mouths,
|
||
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 by 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
|
||
"They look 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 of the warrior caste. 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 "It rattles loudly." 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>
|
||
<FSET ,ZAP-GUN ,OPENBIT>
|
||
<COND (<NOT <0? ,ZAP-CNT>>
|
||
<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 ray gun, and a huge gout of orange
|
||
rays envelops the " D ,PRSI ". You are knocked spinning by the recoil, and
|
||
when you recover, you see no sign 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>
|
||
<COND (<IDROP>
|
||
<COND (<AND <EQUAL? ,PRSO
|
||
,SPACESUIT ,SAFETY-LINE>
|
||
<APPLY <GETP ,PRSO ,P?ACTION>>>
|
||
<RTRUE>)>
|
||
<MOVE ,PRSO ,BASE-OF-TREE>
|
||
<TELL
|
||
"The " D ,PRSO " drops out of sight." CR>)
|
||
(ELSE <RTRUE>)>)
|
||
(<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
|
||
"As the rod slides easily into the slot, 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 must 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, hidden among 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 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>
|
||
<RFALSE>)>>
|
||
|
||
<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 (<NOT <IDROP>> <RTRUE>)
|
||
(<AND <EQUAL? ,PRSO ,SPACESUIT ,SAFETY-LINE>
|
||
<APPLY <GETP ,PRSO ,P?ACTION>>>
|
||
<RTRUE>)
|
||
(<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 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 the displays flash once. There is a sensation of movement
|
||
as the artifact positions itself to follow the course you have set." 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,
|
||
tall and thin, swathed in shimmering robes, speaks 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, so
|
||
it realizes that you have made the wrong choice. All systems shut down,
|
||
and silence settles over all." 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 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>)>> |