spellbreaker/interrupts.zil
historicalsource eb8982c216 Final Revision
2019-04-14 00:27:34 -04:00

1402 lines
44 KiB
Plaintext

"INTERRUPTS for
MAGE
(c) Copyright 1985 Infocom, Inc. All Rights Reserved."
;"GENERICS"
<ROUTINE GENERIC-CUBE-F (TBL LEN
"AUX" F (CNT 1) (CONT <>) CUBE?)
<COND (<VERB? ASK-ABOUT TELL-ME-ABOUT COUNT>
<GET .TBL .CNT>)
(ELSE
<COND (<AND <VERB? TAKE>
<EQUAL? <GET ,P-ITBL ,P-PREP2> ,PR?FROM>
<EQUAL? <GET ,P-PRSI ,P-MATCHLEN> 1>>
<SET CONT <GET ,P-PRSI 1>>)>
<REPEAT ()
<COND (<G? .CNT .LEN>
<RFALSE>)>
<SET F <GET .TBL .CNT>>
<SET CUBE? <GETPT .F ,P?NAME>>
<COND (<AND .CUBE?
<OR <VISIBLE? .F>
<VERB? ASK-ABOUT TELL-ABOUT>>>
<COND (<ZERO? <GETP .F ,P?NAME>>
<COND (<OR <NOT .CONT>
<IN? .F .CONT>>
<RETURN .F>)>)>)>
<SET CNT <+ .CNT 1>>>)>>
<ROUTINE GENERIC-FISH-F (TBL LEN)
<COND (<VERB? DROP EAT SHOW GIVE> ,FISH)>>
<ROUTINE GENERIC-ROCK-F (TBL LEN)
<COND (<IN? ,PLAYER ,ROCK>
,ROCK)
(<IN? ,PLAYER ,OTHER-ROCK>
,OTHER-ROCK)
(<AND <EQUAL? ,YOU-LOC ,ROCK-LOC>
<EQUAL? ,YOU-LOC ,OTHER-ROCK-LOC>>
<RFALSE>)
(<EQUAL? ,YOU-LOC ,ROCK-LOC>
,ROCK)
(<EQUAL? ,YOU-LOC ,OTHER-ROCK-LOC>
,OTHER-ROCK)
(ELSE
<RFALSE>)>>
<ROUTINE GENERIC-CARPET-F (TBL LEN)
<COND (<VERB? EXAMINE> <RFALSE>)
(ELSE ,RANDOM-CARPET)>>
<ROUTINE GENERIC-HOLE-F (TBL LEN)
<COND (<OR <IN? ,OCTAGONAL-HOLE ,HERE>
<EQUAL? ,HERE ,MAZE-2>>
,OCTAGONAL-HOLE)
(ELSE ,GLOBAL-HOLE)>>
<ROUTINE GENERIC-RANDOM-F (TBL LEN)
<RFALSE>>
;"from GUILD.ZIL"
<ROUTINE I-ORATION ()
<SETG OCOUNT <+ ,OCOUNT 1>>
<CRLF>
<COND (<==? ,OCOUNT 1>
<SETG ORATOR ,SNEFFLE>
<TELL
'SNEFFLE " of the Guild of Bakers is addressing the gathering. \"Do you know what this is doing
to our business? Do you know how difficult it is to make those yummy butter
pastries by hand? When a simple 'gloth' spell would fold the dough 83 times
it was possible to make a profit, but now 'gloth' hardly works, and when it
does, it usually folds the dough too often and the butter melts, or it
doesn't come out the right size, or...\" He stops, apparently overwhelmed by
the prospect of a world where the pastries have to be hand-made. \"Can't you do
anything about this? You're supposed to know all about magic!\"">)
(<==? ,OCOUNT 2>
<SETG ORATOR ,HOOBLY>
<TELL
'HOOBLY " of the Guild of Brewers stands, gesturing at the floury baker. \"You don't know what
trouble is! Lately, what comes out of the vats, like as not, is cherry
flavored or worse. The last vat, I swear it, tasted as if grues had been
bathing in it. It takes magic to turn weird vegetables and water into
good Borphee beer. Well, without magic, there isn't going to be any
beer!\" This statement has a profound effect on portions of the
crowd. You can hear rumblings from the back concerning Enchanters. The
word \"traitors\" rises out of nowhere. Your fellow Enchanters are
looking at one another nervously.">)
(<==? ,OCOUNT 3>
<SETG ORATOR ,GZORNENPLATZ>
<TELL
"A tall, gruff fellow begins to speak. This is " 'GZORNENPLATZ " of the
Guild of Huntsmen. \"I'm a simple man, and I don't know much about
magic. But I do know that the wild beasts are kept out of the towns and
villages not just by the huntsmen, but by spells as well. Just
yesterday, one of my men was attacked and badly wounded by a troop of
rat-ants. They'd slipped the bounds set down by a 'fripple' spell
somehow. Are we going to let the sorcerers loose rat-ants on us, and
worse?\" He sits, glaring significantly at the now-angry clump of mages
around you.">)
(<==? ,OCOUNT 4>
<SETG ORATOR ,ARDIS>
<SETG CLEESHED? T>
<MOVE ,BLORPLE-SPELL ,SPELL-BOOK>
<TELL
"As the huntsman's accusations are being absorbed and discussed, "
'ARDIS " of the Guild of Poets takes the floor. He begins to talk about
magic rhyming and spelling aids, and their lack.|
|
In the midst of his
splendid peroration, just as he was sketching out an insulting
mythological allusion in iambic hexameter, the poet turns even greener
than usual. His chin elongates and his skin begins to look sort of
slimy. In the blink of an eye there stands at the podium, not the
orator, but rather a large orange newt. \"Breek! Co-ax! Co-ax!\" it
protests.|
|
As you look around the room in shock, you discover that
Ardis is not alone. Each and every guildmaster in the room has been
turned into a frog, salamander, or other amphibian! All but one, that
is: yourself!|
|
No! There is one other survivor. At the rear of the
room, a " 'SHADOW " in a dark cloak slips quietly out the door.">
<THIS-IS-IT ,SHADOW>
<FCLEAR ,SHADOW ,NDESCBIT>
<MOVE ,SHADOW ,GUILD-HALL>
<QUEUE I-SHADOW-GOES 1>
<DEQUEUE I-ORATION>)>
<CRLF>>
<GLOBAL OCOUNT 0>
<GLOBAL SAMARRA? <>>
<ROUTINE I-SAMARRA ()
<COND (<EQUAL? ,HERE ,BELWIT-SQUARE ,GUILD-HALL>
<TELL CR
"Out of the corner of your eye, you see the dark-cloaked figure. At
first oblivious to you, it straightens up, startled and surprised,
then vanishes." CR>)
(ELSE
<SETG SAMARRA? <>>)>>
<ROUTINE I-SHADOW-GOES ()
<COND (<IN? ,SHADOW ,GUILD-HALL>
<QUEUE I-SHADOW-GOES 1>
<MOVE ,SHADOW ,BELWIT-SQUARE>
<COND (<EQUAL? ,HERE ,GUILD-HALL>
<CRLF>
<TELL
CTHE ,SHADOW ", its cloak billowing, charges south into
Belwit Square." CR>)>)
(ELSE
<MOVE ,EARTH-CUBE ,BELWIT-SQUARE>
<MOVE ,SHADOW ,GLOBAL-OBJECTS>
<FCLEAR ,SHADOW ,TAKEBIT>
<FCLEAR ,SHADOW ,TRYTAKEBIT>
<FCLEAR ,CLOUD ,INVISIBLE>
<QUEUE I-CLOUD-GONE 20>
<COND (<EQUAL? ,HERE ,GUILD-HALL>
<CRLF>
<TELL
"Out in the square, there is a crashing noise like
an explosion, and then a wisp of orange smoke drifts in through the door." CR>)
(<EQUAL? ,HERE ,BELWIT-SQUARE>
<CRLF>
<TELL
"The sinister figure, its face hidden in the shadows of a dark cowl, turns to
face you. It nonchalantly jumps into the air, where it is engulfed
in a huge explosion. A thick and acrid
cloud of orange smoke fills the square. There is no sign of the figure."
CR>)>)>>
<ROUTINE I-CLOUD-GONE ()
<FSET ,CLOUD ,INVISIBLE>
<COND (<IN? ,EARTH-CUBE ,BELWIT-SQUARE>
<FCLEAR ,EARTH-CUBE ,INVISIBLE>
<THIS-IS-IT ,EARTH-CUBE>)>
<COND (<EQUAL? ,HERE ,BELWIT-SQUARE>
<CRLF>
<TELL
"The orange smoke dissipates almost as suddenly as it arrived">
<COND (<IN? ,EARTH-CUBE ,BELWIT-SQUARE>
<TELL
". Left behind on the cobblestones is a small " ,WHITE-CUBE>)>
<CLEVER-CONTENTS ,HERE ". Also revealed" ,EARTH-CUBE>
<TELL ,PERIOD>)>>
<ROUTINE I-SHADOW-ARRIVES ()
<COND (<EQUAL? ,HERE ,CASTLE>
<COND (<EQUAL? ,TIME-STOPPED? ,HERE>
<QUEUE I-SHADOW-ARRIVES 1>
<RFALSE>)>
<QUEUE I-SHADOW -1>
<MOVE ,SHADOW ,CASTLE>
<FCLEAR ,SHADOW ,TAKEBIT>
<FCLEAR ,SHADOW ,TRYTAKEBIT>
<CRLF>
<TELL
"Around the throne a dark mist begins to coalesce. It thickens
into the outline of a human figure sitting
nonchalantly on the throne. You can see the ghost of a cloak and
hood as well." CR>)>>
<GLOBAL SHADOW-COUNT 0>
<ROUTINE I-SHADOW ("AUX" (WON? <>) X)
<COND (<NOT <EQUAL? ,HERE ,CASTLE>>
<DEQUEUE I-SHADOW>
<RFALSE>)>
<COND (,SAMARRA?
<SETG SAMARRA? <>>
<TELL CR
"\"So glad to see you. I was surprised to find you in Borphee when I knew
we had an appointment here.\"" CR>
<RTRUE>)>
<COND (<EQUAL? ,TIME-STOPPED? ,HERE>
<RFALSE>)>
<SETG SHADOW-COUNT <+ ,SHADOW-COUNT 1>>
<CRLF>
<COND (<EQUAL? ,SHADOW-COUNT 1>
<TELL
"The figure speaks. \"It's been such a pleasure to follow your progress. ">
<COND (<G? ,DEATHS 0>
<TELL
"I'm so glad I could be of assistance when you had trouble. It made me
feel useful. ">)>
<TELL "Thank you for collecting the cubes.\"" CR>)
(<EQUAL? ,SHADOW-COUNT 2>
<MOVE ,HYPERCUBE ,HERE>
<TELL
"The figure waves its arms in the air. Before you, rolling and tumbling
in a bath of light, are four cubes.
\"When I gathered these and " THE ,EARTH-CUBE ", after searching old tomes and
questioning the wise about their whereabouts, I conceived my plan.
I could not gather the remainder of the cubes, but to achieve my
desire, they had to be brought together. Who better than you to act in
my stead?\"" CR>)
(<EQUAL? ,SHADOW-COUNT 3>
<TELL
"\"It was a simple matter to perturb the cubes I had to make your
simple magics flicker or fail. I knew this would set you on a quest.
For I know you well!\"
The four cubes disappear. The figure sits straight on its throne and
removes its hood. You are looking at a shadowy, dark and transparent
version of yourself!" CR CR
"\"Magic is a powerful force, the most powerful in the universe, but
its exercise has its price. Each time a great mage performs a spell, some
part of the power in that spell is lost in shadow. A great
mage ultimately creates a shadow-self that is dimly aware.\" The figure
grins. \"You have become the most powerful wizard of all, for I, your
shadow, have become very nearly as powerful as you!\"" CR>)
(<EQUAL? ,SHADOW-COUNT 4>
<TELL
"\"But why, you ask, am I collecting the elemental cubes? It's easy to
answer. I am not powerful enough. My existence is still but a shadow of
your own. My desires are unfulfilled. I wish power over all creation!
I wish to remold the universe in my own image, and rule it. In such a
universe, my merest whim would smash a star or slay a butterfly. You
have brought me the tools of the remaking!\"" CR CR>
<COND (<NOT ,FROZEN?>
<FREEZES-YOU T>
<CRLF>)>
<SHADOW-ACQUIRES ,EARTH-CUBE>
<TELL " sets it in the air between
you, where it hangs motionless." CR>)
(<EQUAL? ,SHADOW-COUNT 5>
<SHADOW-ACQUIRES ,AIR-CUBE>
<TELL
" places it next to " THE ,EARTH-CUBE ". They disappear into a glowing
line which appears between them. ">
<SHADOW-ACQUIRES <>>
<TELL
" places " THE ,FIRE-CUBE " and " THE ,WATER-CUBE " in the air,
creating a square of glowing light." CR>)
(<EQUAL? ,SHADOW-COUNT 6>
<TELL
"Four more cubes are placed above the square: " THE ,LIFE-CUBE ", "
THE ,DEATH-CUBE ", " THE ,LIGHT-CUBE " and " THE ,DARK-CUBE ". A
cube of light shimmers before you. The shadow is growing
more excited, hopping around the structure to place the cubes." CR>)
(<EQUAL? ,SHADOW-COUNT 7>
<TELL
"All the remaining cubes save one, " THE ,MAGIC-CUBE ", build another
square, then the shadow adds its own four cubes to make a second cube
of light, which hangs next to the first." CR>)
(<EQUAL? ,SHADOW-COUNT 8>
<TELL
"The shadow grabs the first cube of light, and twisting, chanting, squeezing,
the cube is compressed and thrust inside the second cube. The points of
the inner and outer cube connect, and it begins to tumble, seeming to
twist and distort as one face, then another, presents itself to you. The
figure capers madly in front of its construction, laughing and
giggling. It ignores you." CR>)
(<EQUAL? ,SHADOW-COUNT 9>
<COND (<ROB ,HYPERCUBE ,HERE ,MAGIC-CUBE>
<TELL
CTHE ,SHADOW " removes some detritus from " THE ,HYPERCUBE ". ">)>
<COND (<IN? ,MAGIC-CUBE ,HYPERCUBE>
<TELL
CTHE ,SHADOW " grins evilly at " THE ,MAGIC-CUBE " floating in">)
(ELSE
<SHADOW-ACQUIRES ,MAGIC-CUBE>
<MOVE ,MAGIC-CUBE ,HYPERCUBE>
<TELL
" raising it high, thrusts it into">)>
<TELL " the
center of the tesseract! Cascades of light pour forth, blindingly
bright, but you can still see " THE ,MAGIC-CUBE " at the center. The
shadow is growing more solid, no longer transparent and dark! Chortling
gleefully, it prepares to jump into the hypercube!" CR>)
(<EQUAL? ,SHADOW-COUNT 10>
<TELL
"The shadow, now as solid as a real person, performs a back flip into
the tesseract">
<COND (<IN? ,MAGIC-CUBE ,HYPERCUBE>
<SET WON? <>>
<TELL ", laughing triumphantly.">)
(<SET X <FIRST? ,HYPERCUBE>>
<COND (<NOT <MAGIC? .X>> <SET WON? 3>)
(ELSE <SET WON? 2>)>)
(ELSE
<SET WON? 1>)>
<COND (<EQUAL? .WON? 2>
<TELL
". \"Fool! Everything will be as it was!\"">)
(.WON?
<TELL
". \"No!\" It screams. \"Stop! Fool, you've destroyed me! You've destroyed ">
<COND (<EQUAL? .WON? 1>
<TELL "everything">)
(<EQUAL? .WON? 3>
<TELL "magic itself">)>
<TELL "! All my lovely plans!\"">)>
<TELL " Now glowing as brightly as the
construction it made, the figure approaches the center. ">
<COND (<EQUAL? .WON? 3>
<TELL
"It grows smaller and smaller, and just before it disappears, the hypercube
vanishes with a pop, and " THE ,MAGIC-CUBE " melts in your hand like an
ice cube." CR CR
"You find yourself back in Belwit Square, all the guildmasters and even
Belboz crowding around you. \"A new age begins today,\" says Belboz after
hearing your story. \"The age of magic is ended, as it must, for as magic
can confer absolute power, so it can also produce absolute evil. We may
defeat this evil when it appears, but if wizardry builds it anew, we can
never ultimately win. The new world will be strange, but in time it will
serve us better.\"" CR>
<SETG SCORE 600>
<FINISH>)
(ELSE
<END-OF-WORLD .WON?>
<CRLF>
<SETG SCORE -99>
<FINISH>)>)>>
<ROUTINE END-OF-WORLD (WON?)
<COND (<EQUAL? .WON? 2>
<TELL
"It returns in fury, retrieves the " 'MAGIC-CUBE ", and resumes
its quest. ">
<END-OF-WORLD <>>
<RTRUE>)>
<TELL
"It dwindles in size and grows in brightness at the same time, until">
<COND (<EQUAL? .WON? 1>
<TELL " it reaches the empty center.
Then you, it and all the world blink out like a spent match.">)
(ELSE
<TELL " you
are almost blinded by a light so bright it fills the world. A
voice like honey and ashes speaks in your mind. \"I am the All, I am
the Will, I am the Power. The universe is Mine! Begone, insect!\" You
and all you hold dear are abolished in an instant, and the reign of the
shadow begins.">)>>
<GLOBAL FROZEN? <>>
<ROUTINE FREEZES-YOU ("OPTIONAL" (PREC? <>))
<COND (<OR <NOT .PREC?> <NOT ,FROZEN?>>
<SETG FROZEN? 5>
<COND (<HELD? ,MAGIC-CUBE>
<QUEUE I-UNFREEZE 2>)>
<COND (.PREC?
<TELL
"\"Now for a small precaution.\"">)
(ELSE
<TELL
"The shadow notices you. \"You force me to take precautions.\"">)>
<TELL
" The shadow gestures, and you are frozen in
place, unable to move even your littlest finger." CR>)>>
"steal all but magic cube"
<ROUTINE STEAL-CUBES ("AUX" (CNT 0) (N 0) CUBE)
<REPEAT ()
<SET CUBE <GET ,CUBE-LIST <* .CNT 2>>>
<MOVE .CUBE ,HERE>
<FSET .CUBE ,NDESCBIT>
<COND (<IGRTR? CNT 11> <RETURN .N>)>>>
<ROUTINE SHADOW-ACQUIRES (OBJ)
<TELL CTHE ,SHADOW>
<COND (<NOT .OBJ> <STEAL-CUBES> ;"all but magic")
(ELSE
<COND (<HELD? .OBJ ,WINNER>
<TELL
" deftly takes " THE .OBJ " from ">
<COND (<IN? .OBJ ,WINNER>
<TELL "you">)
(ELSE
<TELL THE <LOC .OBJ>>)>)
(ELSE
<TELL " takes " THE .OBJ>)>
<TELL " and">
<FSET .OBJ ,NDESCBIT>
<MOVE .OBJ ,HERE>)>>
<ROUTINE I-UNFREEZE ()
<SETG FROZEN? <- ,FROZEN? 1>>
<QUEUE I-UNFREEZE 1>
<CRLF>
<COND (<EQUAL? ,FROZEN? 4>
<TELL
"Your little finger is full of pins and needles. You could move it if you
wanted." CR>)
(<EQUAL? ,FROZEN? 3>
<TELL
"Your feet and hands feel as if they've been asleep, but you can move
them." CR>)
(<EQUAL? ,FROZEN? 2>
<TELL
"Your arms and legs are free, but you still cannot speak or move your
head." CR>)
(<EQUAL? ,FROZEN? 1>
<TELL
"You feel almost thawed, but your mouth feels full of cotton." CR>)
(<ZERO? ,FROZEN?>
<DEQUEUE I-UNFREEZE>
<SETG FROZEN? <>>
<TELL
"The freeze has worn entirely off! Your contact with " THE ,MAGIC-CUBE
" must have weakened it." CR>)>>
;"from HUNGER"
<GLOBAL LOAD-MAX 150>
<GLOBAL LOAD-ALLOWED 150>
<GLOBAL AWAKE -1>
<ROUTINE I-TIRED ("AUX" (FORG <>))
<QUEUE I-TIRED 8>
<COND (<HELD? ,MAGIC-CUBE> <RTRUE>)>
<COND (<G? ,LOAD-ALLOWED 10>
<SETG LOAD-ALLOWED <- ,LOAD-ALLOWED 10>>)>
<COND (<G? ,FUMBLE-NUMBER 1>
<SETG FUMBLE-NUMBER <- ,FUMBLE-NUMBER 1>>)>
<COND (<G? ,SPELL-MAX 1>
<SETG SPELL-MAX <- ,SPELL-MAX 1>>
<COND (<G? ,SPELL-ROOM 0>
<SETG SPELL-ROOM <- ,SPELL-ROOM 1>>)>
<COND (<EQUAL? ,SPELL-ROOM 0>
<SET FORG T>)>)>
<SETG AWAKE <+ ,AWAKE 1>>
<COND (<G? ,AWAKE 8>
<TELL
"You are so exhausted you can't stay awake any longer." CR>
<CRLF>
<V-SLEEP T>
<RFATAL>)
(T
<TELL "You are " <GET ,TIRED-TELL ,AWAKE>>
<COND (.FORG
<TELL
", and the spells you've memorized are becoming confused">)>
<TELL ,PERIOD>)>>
;"from MAGIC"
<ROUTINE I-SNAVIG ("AUX" OCHANGE)
<COND (<NOT ,CHANGED?> <RFALSE>)>
<SET OCHANGE ,CHANGED?>
<SETG CHANGED? <>>
<TELL CR
"You have become yourself again.">
<COND (<EQUAL? .OCHANGE ,GRUE>
<SETG LIT <LIT? ,HERE>>
<COND (<EQUAL? ,HERE ,GRUE-CAVE>
<TELL
" You are immediately noticed by the startled grues. The one drawback of this
essentially light-free environment is that it is also adventurer-free. The
grues are overjoyed to find this deficiency remedied. You are probably less
so.">
<JIGS-UP>
<RFATAL>)>)
(<EQUAL? .OCHANGE ,ROC>
<COND (<FSET? ,HERE ,RAIRBIT>
<START-FALLING>
<TELL
" You begin to fall.">)>)
(<EQUAL? .OCHANGE ,GROUPER>
<COND (<EQUAL? ,HERE ,OCEAN-FLOOR>
<QUEUE I-DROWN 3>
<TELL
" Fortunately your gills have stored some oxygen, but you are in danger
of drowning.">)>
<COND (,ATE-AS-GROUPER?
<TELL
" You have a horrible stomachache. It must have been something you ate.">)>)>
<CRLF>>
<ROUTINE I-DROWN ()
<COND (<AND <EQUAL? ,HERE ,OCEAN-FLOOR>
<NOT <EQUAL? ,CHANGED? ,GROUPER>>>
<CRLF>
<JIGS-UP
"Your air has run out. You are still far underwater. You have drowned.">)>>
<ROUTINE I-GIRGOL ("AUX" TF?)
<COND (<NOT ,TIME-STOPPED?> <RFALSE>)
(<SET TF? <TIME-FROZEN?>>
<TELL CR "Time resumes its forward flight." CR>)>
<SETG TIME-STOPPED? <>>
<COND (,ROCK-FLAG
<SETG ROCK-FLAG <>>
<COND (<EQUAL? ,HERE ,HUT-ROOM ,MOUNTAIN-TOP ,CAVE-ENTRANCE>
<TELL CR
"You hear a gigantic rush of sound as an avalanche tumbles down the
mountain." CR>)
(<EQUAL? ,HERE ,BOULDER-1 ,BOULDER-2 ,BOULDER-3>
<CRLF>
<JIGS-UP
"Tons of rock and dirt continue towards their rendezvous with the valley
floor. Unfortunately, you are ground to nothingness when they arrive for
their appointment.">)
(<EQUAL? .TF?
,CLIFF-TOP ,CLIFF-MIDDLE ,CLIFF-BOTTOM>
<QUEUE I-AVALANCHE -1>
<TELL CR
"Tons of rock and dirt continue their downward plunge." CR>)>)>
<COND (<AND <EQUAL? .TF? ,OGRE-BEDROOM ,OGRE-CAVE>
<EQUAL? ,HERE ,OGRE-BEDROOM ,OGRE-CAVE>>
<I-OGRE-KILLS-YOU T>)>
<COND (<AND <EQUAL? .TF? ,PAST-RUINS-ROOM>
<EQUAL? ,HERE ,PAST-RUINS-ROOM>>
<QUEUE I-WATER-RISING 3>
<TELL CR
"The water begins to rise again." CR>)>
<COND (<AND <EQUAL? .TF? ,CASTLE>
<EQUAL? ,HERE ,CASTLE>>
<COND (<EQUAL? ,SHADOW-COUNT 8>
<TELL CR
"\"Fool!\" chortles the shadow." CR>)>
<RTRUE>)>>
<GLOBAL OGRE-MURDEROUS? <>>
<ROUTINE I-OGRE-KILLS-YOU ("OPTIONAL" (GIRGOL? <>))
<COND (<OR <TIME-FROZEN?>
,SNEEZY?
<EQUAL? ,ESPNIS? ,OGRE>>
<QUEUE I-OGRE-KILLS-YOU 2>
<RFALSE>)>
<COND (<EQUAL? ,HERE ,OGRE-CAVE ,OGRE-BEDROOM>
<COND (<IN? ,PLAYER ,ZIPPER>
<SETG OGRE-MURDEROUS? T>
<RTRUE>)>
<COND (<NOT .GIRGOL?> <CRLF>)>
<TELL
"The ogre, impatient with your presence and your impudent intrusion, ">
<COND (<EQUAL? ,HERE ,OGRE-BEDROOM>
<TELL "charges in and ">)>
<TELL "tramples you to a pulp.">
<JIGS-UP>)>>
<ROUTINE I-ESPNIS ()
<COND (<TIME-FROZEN?>
<QUEUE I-ESPNIS 2>)
(<NOT ,ESPNIS?> <RFALSE>)>
<COND (<IN? ,ESPNIS? ,HERE>
<TELL CR
CTHE ,ESPNIS? " awakes, looking sheepish.">
<COND (<AND <EQUAL? ,ESPNIS? ,OGRE>
<NOT ,SNEEZY?>>
<OGRE-MAD>)
(ELSE <CRLF>)>)>
<SETG ESPNIS? <>>>
<ROUTINE I-LISKON ("OPTIONAL" (NOCR? <>) "AUX" SF)
<COND (<NOT ,SHRINK-FLAG> <RFALSE>)>
<SET SF ,SHRINK-FLAG>
<SETG SHRINK-FLAG <>>
<COND (<NOT <EQUAL? .SF ,PLAYER>>
<COND (<AND <FSET? ,WEED ,RMUNGBIT>
<EQUAL? .SF ,WEED>>
<PUTP ,WEED ,P?SIZE 200>)>
<COND (<VISIBLE? .SF>
<COND (<NOT .NOCR?> <CRLF>)>
<COND (<EQUAL? .SF ,SNAKE>
<TELL
"The serpent slowly and jerkily returns to its former size, swallowing its
tail again in the process." CR>)
(ELSE
<TELL
"With a rather unsettling lack of uniformity, " THE .SF " returns
to its former size.">
<COND (<AND <EQUAL? .SF ,WEED>
<FSET? ,WEED ,RMUNGBIT>>
<COND (<IN? .SF ,WINNER>
<MOVE .SF ,HERE>
<TELL
" It's too heavy to carry.">)
(<EQUAL? <LOC .SF> ,BOTTLE>
<MOVE .SF <META-LOC ,BOTTLE>>
<REMOVE ,BOTTLE>
<TELL
" It bursts the bottle!">)
(<EQUAL? <LOC .SF>
,MAGIC-CARPET
,RANDOM-CARPET>
<MOVE .SF <META-LOC .SF>>)>)>
<CRLF>)>)>)
(ELSE
<SETG SMALL-FLAG <>>
<COND (<NOT .NOCR?> <CRLF>)>
<TELL
"You feel stretched, wrung out, and pulled in all directions. You
are growing." CR>
<COND (<EQUAL? <LOC ,PLAYER> ,CABINET ,PAST-CABINET>
<TOO-LARGE ,CABINET>)
(<IN? ,PLAYER ,ZIPPER>
<RFALSE>)
(<EQUAL? ,HERE ,IN-PIPE ,IN-PIPE-2 ,IN-SEWER>
<TOO-LARGE ,WATER-PIPE>
<RFATAL>)
(<EQUAL? ,HERE ,IN-CHANNEL>
<CRLF>
<GOTO ,OUBLIETTE>)
(<EQUAL? ,HERE ,RUINED-PIPE>
<CRLF>
<GOTO ,RUINS-ROOM>)>)>>
<ROUTINE TOO-LARGE (OBJ)
<TELL
"Unfortunately, you are rather too large for " THE .OBJ " you are in, and are
crushed by its sides as you try to resume your full size." CR>
<JIGS-UP>>
;"from C1"
<ROUTINE I-SNAKE ()
<COND (<EQUAL? ,HERE ,NORTH-SNAKE-ROOM ,SOUTH-SNAKE-ROOM>
<TELL CR
"The scaly wall begins to move, undulating back and forth in the
confined space. A musty odor permeates the air, and you hear
scales scraping on stone. Finally, an enormous head slides into view
from the east and stops with one monstrous eye staring coldly at you.
You notice something unusual about the huge serpent: the tail, which
trails out of the western hole, disappears into the gaping maw of the
creature. You realize that the monster must be huge enough to make a
complete loop!" CR>)>>
<ROUTINE I-UNMALYON-IDOL ()
<DEQUEUE I-IDOL>
<DEQUEUE I-FULL-YAWN>
<DEQUEUE I-IDOL-ASLEEP>
<FCLEAR ,IDOL ,PERSON>
<COND (<EQUAL? ,HERE ,TEMPLE-ROOM>
<CRLF>
<TELL
"The idol turns back into basalt.">
<COND (,IDOL-ASLEEP?
<TELL
" It is curled up comfortably asleep.">)
(,IDOL-YAWNING?
<TELL
" It has been caught in a cheek-stretching yawn.">)>
<CRLF>)>>
<ROUTINE I-IDOL ()
<QUEUE I-IDOL -1>
<COND (<EQUAL? ,HERE ,TEMPLE-ROOM>
<TELL CR
"The idol is ">
<COND (,IDOL-SLEEPED?
<TELL
"looking sleepy and tired.">)
(ELSE
<TELL-IDOL-ACTION>
<TELL
" around the room, searching for something. No doubt
it's you! It looks a little stiff, but for former basalt, it's pretty
supple.">)>
<CRLF>)>>
<ROUTINE TELL-IDOL-ACTION ()
<COND (<IN? ,OPAL ,IDOL> <TELL "looking">)
(ELSE <TELL "groping">)>>
<ROUTINE I-FULL-YAWN ()
<DEQUEUE I-IDOL>
<SETG IDOL-ASLEEP? <>>
<FSET ,MOUTH ,OPENBIT>
<SETG IDOL-YAWNING? T>
<COND (<EQUAL? ,HERE ,TEMPLE-ROOM>
<TELL CR
"The idol is yawning sleepily, its mouth gaping open." CR>)>>
<ROUTINE I-IDOL-ASLEEP ()
<SETG IDOL-YAWNING? <>>
<FCLEAR ,MOUTH ,OPENBIT>
<SETG IDOL-ASLEEP? T>
<COND (<EQUAL? ,HERE ,TEMPLE-ROOM>
<TELL CR
"The idol curls up comfortably and falls asleep on the floor." CR>)>>
<ROUTINE I-OPAL-SMASHES ()
<COND (<AND <IN? ,OPAL ,IDOL> ,OPAL-LOOSE?>
<REMOVE ,OPAL>
<SETG OPAL-LOOSE? <>>
<MOVE ,OPAL-SHARD ,HERE>
<COND (<EQUAL? ,HERE ,TEMPLE-ROOM>
<TELL
"The opal totters one last time and falls. You ">
<COND (<IN? ,PLAYER ,IDOL>
<TELL "grab for it frantically">)
(ELSE
<TELL "try to catch it">)>
<TELL ", but it
escapes your grip and smashes into a million pieces on the idol's
foot." CR>)>)>>
<GLOBAL SLIDE-PROB 10>
<ROUTINE I-AVALANCHE? ()
<COND (<NOT <EQUAL? ,HERE ,CLIFF-TOP>> <RFALSE>)
(<EQUAL? ,TIME-STOPPED? ,HERE> <RFALSE>)
(<PROB ,SLIDE-PROB>
<SETG ROCK-SLIDE-COUNT 0>
<DEQUEUE I-AVALANCHE?>
<QUEUE I-AVALANCHE -1>
<TELL CR
"Something you've done has disturbed the rocks above! Dirt and small stones
are trickling down. " ,IT-LOOKS-LIKE "the whole dike is about to give way!" CR>)
(ELSE
<SETG SLIDE-PROB <+ ,SLIDE-PROB 10>>)>>
<GLOBAL ROCK-SLIDE-COUNT 0>
<ROUTINE HEAR-AVALANCHE ()
<TELL
"You hear the tremendous sliding, deep-voiced roar of thousands of tons of
rock tumbling down the mountain">>
<ROUTINE I-AVALANCHE ()
<COND (,TIME-STOPPED? <RFALSE>)
(<G? ,ROCK-SLIDE-COUNT 3>
<SETG ROCK-SLIDE-COUNT 0>
<DEQUEUE I-AVALANCHE>
<RFALSE>)>
<SETG ROCK-SLIDE-COUNT <+ ,ROCK-SLIDE-COUNT 1>>
<COND (<EQUAL? ,HERE ,CAVE-ENTRANCE ,MOUNTAIN-TOP>
<CRLF>
<HEAR-AVALANCHE>
<COND (<EQUAL? ,HERE ,CAVE-ENTRANCE>
<TELL " to your east">)>
<TELL ,PERIOD>)
(<EQUAL? ,HERE ,CLIFF-TOP ,CLIFF-MIDDLE ,CLIFF-BOTTOM>
<CRLF>
<COND (<EQUAL? ,ROCK-SLIDE-COUNT 1>
<TELL
"Huge rocks and boulders are tumbling down, making an almost continuous
curtain above you. If you don't do something soon, you will die!" CR>)
(<OR <AND <EQUAL? ,HERE ,CLIFF-TOP>
<G? ,ROCK-SLIDE-COUNT 1>>
<AND <EQUAL? ,HERE ,CLIFF-MIDDLE>
<G? ,ROCK-SLIDE-COUNT 2>>
<AND <EQUAL? ,HERE ,CLIFF-BOTTOM>
<G? ,ROCK-SLIDE-COUNT 3>>>
<DEQUEUE I-AVALANCHE>
<SETG ROCK-SLIDE-COUNT 0>
<COND (<IN? ,PLAYER ,ZIPPER>
<TELL
"Although you can't see or feel it, y">)
(ELSE <TELL "Y">)>
<JIGS-UP
"ou are swept away down the cliff face by thousands of tons of rock.
A huge cloud of dust blowing away down the valley is your only memorial.">)
(<EQUAL? ,HERE ,CLIFF-TOP ,CLIFF-MIDDLE ,CLIFF-BOTTOM>
<ROCKS-TUMBLING>)>)>>
<ROUTINE ROCKS-TUMBLING ()
<TELL
"Thousands of tons of rock are tumbling down the mountainside!" CR>>
<ROUTINE I-OGRE ()
<COND (<EQUAL? ,TIME-STOPPED? ,OGRE-CAVE> <RFALSE>)
(<EQUAL? ,HERE ,CAVE-ENTRANCE ,OGRE-BEDROOM>
<COND (<EQUAL? ,ESPNIS? ,OGRE>
<CRLF>
<OGRE-NOISES>)
(,SNEEZY?
<TELL CR
"You hear explosive sneezing from the cave." CR>)
(<PROB 50>
<CRLF>
<OGRE-NOISES>)>)
(<EQUAL? ,HERE ,OGRE-CAVE>
<COND (<EQUAL? ,ESPNIS? ,OGRE>
<TELL CR
"The ogre snores loudly." CR>)
(,SNEEZY?
<TELL CR
"The ogre doubles over in a spectacular paroxysm of sneezing." CR>)
(<PROB 50>
<TELL CR
"The ogre sneezes." CR>)>)
(ELSE
<DEQUEUE I-OGRE>
<RFALSE>)>>
<ROUTINE OGRE-NOISES ()
<COND (<NOT <TIME-FROZEN?>>
<TELL
"You hear a noise from within the cave that sounds like ">
<COND (<EQUAL? ,ESPNIS? ,OGRE> <TELL "snoring">)
(T <TELL "a sneeze">)>
<TELL ,PERIOD>)>>
;"from C2"
<ROUTINE I-FLOTSAM ()
<SINK-STUFF ,OCEAN-ROOM>
<SINK-STUFF ,LOST-IN-OCEAN>>
<ROUTINE SINK-STUFF (RM "AUX" (F <FIRST? .RM>) N)
<REPEAT ()
<COND (<NOT .F> <RETURN>)>
<SET N <NEXT? .F>>
<COND (<EQUAL? .F ,PLAYER ,GROUPER> T)
(<AND <EQUAL? .F ,WATER-CUBE>
<QUEUED? I-CUBE-SINKS>>
T)
(<OR <EQUAL? .F ,ZIPPER>
<NOT <FSET? .F ,CONTBIT>>
<AND <FSET? .F ,OPENBIT>
<PROB 75>>>
<MOVE .F ,OCEAN-FLOOR>
<FCLEAR .F ,NDESCBIT>
<COND (<EQUAL? ,HERE .RM>
<TELL
CTHE .F " sinks beneath the waves." CR>)>)
(ELSE
<QUEUE I-FLOTSAM 2>)>
<SET F .N>>>
<ROUTINE I-GROUPER ("AUX" (SNACK <>))
<COND (<IN? ,FISH ,OCEAN-ROOM>
<SET SNACK ,FISH>)
(<IN? ,BREAD ,OCEAN-ROOM>
<SET SNACK ,BREAD>)
(<IN? ,WATER-CUBE ,OCEAN-ROOM>
<SET SNACK ,WATER-CUBE>)
(<IN? ,BOTTLE ,OCEAN-ROOM>
<SET SNACK ,BOTTLE>)>
<COND (.SNACK
<MOVE .SNACK ,GROUPER>
<QUEUE I-GROUPER-IN-NEST 2>
<COND (<EQUAL? ,HERE ,OCEAN-ROOM>
<TELL CR
"The grouper, nosing around for something tasty, swallows " THE .SNACK
" and starts to swim downward, temporarily sated." CR>)>)>>
<ROUTINE I-CUBE-SINKS ()
<COND (<IN? ,WATER-CUBE ,OCEAN-ROOM>
<MOVE ,WATER-CUBE ,OCEAN-FLOOR>
<FCLEAR ,WATER-CUBE ,NDESCBIT>
<COND (<EQUAL? ,HERE ,OCEAN-ROOM>
<TELL CR
CTHE ,WATER-CUBE " sinks out of sight." CR>)>)>>
<ROUTINE I-GROUPER-IN-NEST ()
<MOVE ,GROUPER ,OCEAN-FLOOR>
<COND (<EQUAL? ,HERE ,OCEAN-ROOM>
<TELL
"The grouper swims down out of sight." CR>)
(<EQUAL? ,HERE ,OCEAN-FLOOR>
<TELL
"The grouper approaches, its goggle eyes staring curiously." CR>)>>
<ROUTINE I-TINSOT ()
<SETG ICED-OBJECT <>>
<COND (<NOT <QUEUED? I-OUBLIETTE-EMPTIES>>
<SETG FREEZE-FLAG 0>)>
<RFALSE>>
<ROUTINE I-OUBLIETTE-FILLS ("AUX" (H <>))
<COND (<EQUAL? ,HERE ,OUBLIETTE> <SET H T>)>
<COND (<L? ,WATER-FLAG 3>
<ROB ,OUBLIETTE <> ,ICEBERG>
<SETG WATER-FLAG <+ ,WATER-FLAG 1>>
<COND (.H
<TELL CR
"The water level rises. The oubliette is "
<GET ,WATER-HEIGHTS ,WATER-FLAG> " full.">
<COND (<NOT <IN? ,PLAYER ,ICEBERG>>
<SOAK-PLAYER>)>
<NOT-SITTING>
<CRLF>)>)
(ELSE
<SETG WATER-FLAG 4>
<DEQUEUE I-OUBLIETTE-FILLS>
<QUEUE I-OUBLIETTE-EMPTIES 5>
<COND (.H
<TELL CR
"The oubliette is full. There is about four feet of space between the
water and the roof. The water must have reached its level, because it has
ceased to rise. You are ">
<COND (<IN? ,PLAYER ,ICEBERG>
<TELL
"floating serenely on a small ice floe.">)
(ELSE
<TELL
"splashing a tantalizing distance from the roof and trap door.">)>
<CRLF>)>)>>
<ROUTINE I-OUBLIETTE-EMPTIES ("AUX" (H <>))
<COND (<EQUAL? ,HERE ,OUBLIETTE> <SET H T>)>
<COND (<AND <EQUAL? ,WATER-FLAG 4>
<G? ,FREEZE-FLAG 0>>
<SETG FREEZE-FLAG 0>
<QUEUE I-OUBLIETTE-EMPTIES -1>
<COND (.H
<TELL CR
"The water level has begun to fall." CR>)>)
(ELSE
<SETG WATER-FLAG <- ,WATER-FLAG 1>>
<COND (<G? ,WATER-FLAG 0>
<COND (.H
<TELL CR
"The water level falls. The oubliette is "
<GET ,WATER-HEIGHTS ,WATER-FLAG> " full." CR>)>)
(ELSE
<DEQUEUE I-OUBLIETTE-EMPTIES>
<COND (<IN? ,PLAYER ,ICEBERG>
<MOVE ,WINNER ,HERE>)>
<ROB ,ICEBERG ,HERE>
<REMOVE ,ICEBERG>
<SETG ICED-OBJECT <>>
<COND (.H
<TELL CR
"The oubliette is empty again. All the ice has melted, and the pipes
are open again." CR>)>)>)>>
<ROUTINE I-DOWNSTREAM ("AUX" (RM <>))
<COND (<EQUAL? ,HERE ,IN-CHANNEL>
<SET RM ,IN-PIPE>)
(<EQUAL? ,HERE ,IN-PIPE>
<SET RM ,IN-PIPE-2>)
(<EQUAL? ,HERE ,IN-PIPE-2>
<SET RM ,RUINED-PIPE>)
(<EQUAL? ,HERE ,RUINED-PIPE>
<SET RM ,IN-SEWER>)>
<COND (.RM
<TELL CR
"The rushing water is forcing you downstream." CR CR>
<GOTO .RM>)>>
<GLOBAL ROC-COUNT 0>
<GLOBAL ROC-DESCS
<PTABLE
"tiny black dot silhouetted against the clouds."
"large object silhouetted against the clouds."
"large bird approaching."
"large bird circling the tower and eyeing you suspiciously.">>
<ROUTINE I-ROC ()
<COND (<EQUAL? ,HERE ,GUARD-TOWER>
<SETG ROC-COUNT <+ ,ROC-COUNT 1>>
<COND (<IN? ,PLAYER ,ZIPPER>
<RFALSE>)
(<G? ,ROC-COUNT 4>
<DEQUEUE I-ROC>
<ROC-GRABS-PLAYER>
<CRLF>
<GOTO ,MIDAIR>)
(<G? ,ROC-COUNT 0>
<THIS-IS-IT ,ROC>
<TELL CR "There is a ">
<DESCRIBE-ROC>)>)>>
<GLOBAL ROC-FLY-COUNT 0>
<ROUTINE I-ROC-FLY ()
<SETG ROC-FLY-COUNT <+ ,ROC-FLY-COUNT 1>>
<SETG EW-COUNT <- ,EW-COUNT 1>>
<CRLF>
<COND (<EQUAL? ,ROC-FLY-COUNT 1>
<SETG UD-COUNT 4>
<TELL
"The roc gains height and heads west towards the distant Flathead
Mountains." CR>)
(<EQUAL? ,ROC-FLY-COUNT 2>
<TELL
"The roc continues to fly west towards the mountains." CR>)
(<EQUAL? ,ROC-FLY-COUNT 3>
<TELL
"You are rapidly approaching a rocky eyrie containing an enormous
nest." CR>)
(<EQUAL? ,ROC-FLY-COUNT 4>
<SETG UD-COUNT 0>
<DEQUEUE I-ROC-FLY>
<MOVE ,PLAYER ,HERE>
<MOVE ,ROC ,ROC-NEST>
<TELL
"The roc circles over its nest, settles to the ground, and releases you."
CR CR>
<GOTO ,ROC-NEST>)>>
<ROUTINE I-ROC-HATCHES ("OPTIONAL" (ARG <>))
<COND (<EQUAL? ,TIME-STOPPED? ,HERE>
<QUEUE I-ROC-HATCHES 5>
<RFALSE>)
(<IN? ,BABY-ROC ,HERE>
<RFALSE>)>
<MOVE ,BABY-ROC ,ROC-NEST>
<FSET ,EGG ,RMUNGBIT>
<COND (<EQUAL? ,HERE ,ROC-NEST>
<QUEUE I-YUM-YUM -1>
<COND (<IN? ,PLAYER ,ZIPPER> <RFALSE>)
(<NOT .ARG> <CRLF>)
(ELSE
<TELL
"You batter the egg, intending to destroy it. ">)>
<TELL
"Suddenly the egg begins to crack. You can see feathers,
then a large, almost reptilian eye. The egg shatters, and a small
(wagon-sized) roc chick rolls out. It eyes you hungrily">
<COND (<IN? ,CONNECTIVITY-CUBE ,ROC-NEST>
<REMOVE ,CONNECTIVITY-CUBE>
<TELL ", notices the cube at its feet, and gobbles
it greedily. It still looks hungry">)>
<TELL ,PERIOD>)>>
<ROUTINE I-YUM-YUM ()
<COND (<EQUAL? ,HERE ,ROC-NEST>
<COND (<AND <NOT <IN? ,PLAYER ,ZIPPER>>
<NOT <EQUAL? ,ESPNIS? ,BABY-ROC>>>
<COND (<IN? ,CONNECTIVITY-CUBE ,PLAYER>
<MOVE ,CONNECTIVITY-CUBE ,HERE>)>
<DEQUEUE I-YUM-YUM>
<JIGS-UP
"The baby roc, still ravenously hungry, devours you with relish.">)>)
(ELSE
<DEQUEUE I-YUM-YUM>
<RFALSE>)>>
;"from C3"
<ROUTINE I-MERCHANT ()
<COND (<NOT <FSET? ,MERCHANT ,TOUCHBIT>>
<FSET ,MERCHANT ,TOUCHBIT>
<MOVE ,MAGIC-CARPET ,MERCHANT>
<MOVE ,RANDOM-CARPET ,MERCHANT>
<TELL CR
"The merchant approaches you. \"May I help you? We have a fine selection
of carpets of all sizes and uses.\" He indicates the pile of rugs and
picks up two of them. \"These are particularly nice,\" he says. One is "
A ,MAGIC-CARPET " with a strange design of cubes, and the other is "
A ,RANDOM-CARPET " that's rather shabby and badly made."
CR>)
(,MERCHANT-FLAG
<SETG MERCHANT-FLAG <>>
<RFALSE>)
(<OR <IN? ,MAGIC-CARPET ,PLAYER>
<IN? ,RANDOM-CARPET ,PLAYER>>
<TELL
"The merchant is patiently waiting for you to leave." CR>)
(ELSE
<TELL CR
"The merchant tries to look bored. He doesn't pull it off." CR>)>>
;<ROUTINE I-URCHIN ()
<COND (<NOT <FIRST? ,BAZAAR>>
<DEQUEUE I-URCHIN>
<RFALSE>)
(ELSE
<QUEUE I-URCHIN -1>)>
<COND (<ROB ,HERE <> ,PLAYER>
<COND (<EQUAL? ,HERE ,BAZAAR>
<TELL CR
"A ragged street urchin, excited by this opportunity,
runs up, scoops up something and disappears into the crowd." CR>)>)>>
<GLOBAL SMASH-PROB 0>
<GLOBAL ROC-PROB 0>
<GLOBAL FALLING? <>>
<ROUTINE I-FALLING ()
<COND (<EQUAL? ,TIME-STOPPED? ,HERE>
<RFALSE>)
(<NOT <EQUAL? ,HERE ,MIDAIR ,LOST-IN-CLOUDS>>
<SETG FALLING? <>>
<SETG SMASH-PROB 0>
<DEQUEUE I-FALLING>
<RFALSE>)>
<COND (<G? ,UD-COUNT 1>
<SETG UD-COUNT <- ,UD-COUNT 1>>
<SETG ROC-PROB <+ ,ROC-PROB 25>>
<COND (<AND <NOT <FSET? <LOC ,PLAYER> ,VEHBIT>>
<EQUAL? ,OHERE ,EARTH-ROOM ,AIR-ROOM>
<PROB ,ROC-PROB>>
<SETG FALLING? <>>
<ROC-GRABS-PLAYER T>
<RTRUE>)>)
(ELSE
<SETG SMASH-PROB <+ ,SMASH-PROB 20>>
<COND (<PROB ,SMASH-PROB>
<SETG FALLING? <>>
<TELL CR
"You tumble helplessly into the earth, and the results are, of course,
fatal.">
<JIGS-UP>
<RFATAL>)>)>
<TELL CR
"You are falling towards the ground, wind whipping around you." CR>>
<ROUTINE I-ROCK-ARRIVES ()
<MOVE ,LAVA-ROCK ,VOLCANO-BASE>
<COND (<EQUAL? ,HERE ,VOLCANO-BASE>
<TELL CR
"One fragment of molten lava explodes out of the flow and drops right
at your feet! It sizzles and hisses." CR>)>>
<ROUTINE I-GRUES-NOTICE ("OPTIONAL" (CR? <>))
<COND (<EQUAL? ,HERE ,GRUE-CAVE>
<COND (<NOT ,LIT>
<COND (<NOT .CR?> <CRLF>)>
<JIGS-UP
"Scrabbling and scratching claws are approaching in the dark. The last
sound you hear is the gurgling of the pack of grues that devours you
with unmentionable enjoyment.">)
(<OR <NOT <EQUAL? ,CHANGED? ,GRUE>>
<NOT <EQUAL? ,LIT ,GRUE>>>
<GRUES-NOTICE-LIGHT>)>)
(<EQUAL? ,HERE ,PILLAR-ROOM ,LIGHT-POOL>
<COND (<NOT ,LIT>
<COND (<NOT .CR?> <CRLF>)>
<TELL
"Scrabbling and scratching claws are nearby.">)
(<OR <NOT <EQUAL? ,CHANGED? ,GRUE>>
<NOT <EQUAL? ,LIT ,GRUE>>>
<TELL
"The grues have noticed you, and are terrifically agitated." CR>)>)>>
<ROUTINE GRUES-NOTICE-LIGHT ()
<TELL
"The shapes are coming closer. They have noticed ">
<TELL-LIGHT-SOURCE>
<TELL ,PERIOD>
<TELL
"They approach you warily, avoiding the tiny drips
of light. They grab you, overwhelm you, and ">
<COND (<EQUAL? ,CHANGED? ,GRUE>
<TELL "as in
addition to their other nasty habits, grues are cannibalistic, they ">)>
<TELL "devour you, grunting, gurgling,
and snapping at each other as they fight over the best parts.">
<JIGS-UP>>
<ROUTINE I-FRIED-GRUE ()
<COND (<AND <EQUAL? ,HERE ,LIGHT-POOL>
<EQUAL? ,CHANGED? ,GRUE>>
<JIGS-UP
"The burning sensation gets worse and worse. You struggle
against it, but the light is just too much. You lose consciousness, sink
to the bottom of the pool, and expire.">)
(ELSE
<QUEUE I-FRIED-GRUE -1>
<RFALSE>)>>
<ROUTINE I-ALARM ()
<COND (<NOT <IN? ,ALARM-FAIRY ,SCALES-ROOM>>
<MOVE ,ALARM-FAIRY ,SCALES-ROOM>
<COND (<EQUAL? ,HERE ,SCALES-ROOM>
<TELL CR
"Suddenly an alarm fairy appears in the Treasury. It carries a big gong which
it begins to pound incessantly, and it yells at the top of its lungs." CR>)>)>
<COND (<EQUAL? ,HERE ,SCALES-ROOM>
<TELL CR
"\"There's a thief here! Hey, guards! Thief! Nasty thieving thief's here!
Come capture the thief!\" The din is tremendous." CR>)>>
<ROUTINE I-GUARDS ()
<SETG GUARDS-FLAG <+ ,GUARDS-FLAG 1>>
<COND (<EQUAL? ,GUARDS-FLAG 1>
<QUEUE I-GUARDS 1>
<COND (<EQUAL? ,HERE ,SCALES-ROOM>
<COND (<FSET? ,IRON-DOOR ,OPENBIT>
<TELL CR
"Five burly guards, unshaven and thuggish, stand
outside the door. It is clear their intention is to come in.">)
(ELSE
<TELL CR
"You can hear a key being inserted in the lock from outside. The alarm
fairy thumbs its nose at you derisively.">)>
<CRLF>)>)
(ELSE
<SETG TREASURY-GUARDED? T>
<COND (<EQUAL? ,HERE ,SCALES-ROOM ,INNER-VAULT>
<TELL CR "All at once ">
<COND (<NOT <FSET? ,IRON-DOOR ,OPENBIT>>
<TELL "the door bursts in and ">)>
<FCLEAR ,IRON-DOOR ,OPENBIT>
<TELL
"five burly guards crowd into the
Treasury. They look at you with extreme disapproval, tinged with a
certain sadistic anticipation of what is to come. The alarm fairy
twitters about near the ceiling, jeering at you. \"Told you so, nyaah,
nyaah!\" it chants. In the interest of taste, we will gloss over what
happens next, but at the end of it you are dead.">
<JIGS-UP>)>)>>
;"from C4"
<ROUTINE I-OTHER-ROCK ("AUX" DIR RROW RCOL OROW OCOL (DROW 0) (DCOL 0))
<COND (<EQUAL? ,ROCK-LOC ,OTHER-ROCK-LOC>
<SETG ROCK-MOVED? <>>
<DEQUEUE I-OTHER-ROCK>
<TELL
CTHE ,OTHER-ROCK ", mesmerized by the looming presence of " THE ,ROCK
", does not move." CR>)
(,ROCK-MOVED?
<SETG ROCK-MOVED? <>>
<SET RROW </ ,ROCK-LOC 4>>
<SET RCOL <BAND ,ROCK-LOC 3>>
<SET OROW </ ,OTHER-ROCK-LOC 4>>
<SET OCOL <BAND ,OTHER-ROCK-LOC 3>>
<SET DROW
<COND (<G? .RROW .OROW> <- .RROW .OROW>)
(ELSE <- .OROW .RROW>)>>
<SET DCOL
<COND (<G? .RCOL .OCOL> <- .RCOL .OCOL>)
(ELSE <- .OCOL .RCOL>)>>
<CRLF>
<COND (<EQUAL? ,OTHER-ROCK-LOC 1>
<COND (<AND <NOT <EQUAL? ,ROCK-LOC 4 5 8>>
<ZERO? <BAND <+ .DROW .DCOL> 1>>>
<SET DIR ,P?SW>)
(<NOT <EQUAL? ,ROCK-LOC 5>>
<SET DIR ,P?SOUTH>)
(<NOT <EQUAL? ,ROCK-LOC 2>>
<SET DIR ,P?EAST>)>)
(<EQUAL? ,OTHER-ROCK-LOC 4>
<COND (<AND <NOT <EQUAL? ,ROCK-LOC 1 2 5>>
<ZERO? <BAND <+ .DROW .DCOL> 1>>>
<SET DIR ,P?NE>)
(<NOT <EQUAL? ,ROCK-LOC 5>>
<SET DIR ,P?EAST>)
(<NOT <EQUAL? ,ROCK-LOC 8>>
<SET DIR ,P?SOUTH>)>)
(<AND <EQUAL? ,OTHER-ROCK-LOC 5>
<EQUAL? ,ROCK-LOC 1 4>>
<SET DIR
<COND (<EQUAL? ,ROCK-LOC 4> ,P?EAST)
(ELSE ,P?SOUTH)>>)
(<EQUAL? .RROW .OROW>
<COND (<OR <EQUAL? .OROW 0>
<AND <EQUAL? .OROW 1>
<EQUAL? .OCOL 0>>>
<SET DIR ,P?SOUTH>)
(<OR <EQUAL? .OROW 3>
<PROB 50>>
<SET DIR ,P?NORTH>)
(ELSE
<SET DIR ,P?SOUTH>)>)
(<EQUAL? .RCOL .OCOL>
<COND (<OR <EQUAL? .OCOL 0>
<AND <EQUAL? .OCOL 1>
<EQUAL? .OROW 0>>>
<SET DIR ,P?EAST>)
(<OR <EQUAL? .OCOL 3>
<PROB 50>>
<SET DIR ,P?WEST>)
(ELSE
<SET DIR ,P?EAST>)>)
(<AND <EQUAL? .OCOL 0> <EQUAL? .OROW 3>>
<COND (<PROB 50> <SET DIR ,P?EAST>)
(ELSE <SET DIR ,P?NORTH>)>)
(<AND <EQUAL? .OCOL 3> <EQUAL? .OROW 3>>
<COND (<PROB 50> <SET DIR ,P?WEST>)
(ELSE <SET DIR ,P?NORTH>)>)
(<AND <EQUAL? .OCOL 3> <EQUAL? .OROW 0>>
<COND (<PROB 50> <SET DIR ,P?WEST>)
(ELSE <SET DIR ,P?SOUTH>)>)
(<AND <G? .RROW .OROW>
<G? .OROW 0>
<OR <G? .OROW 1> <G? .OCOL 0>>>
<SET DIR ,P?NORTH>)
(<AND <G? .RCOL .OCOL>
<G? .OCOL 0>
<OR <G? .OCOL 1> <G? .OROW 0>>>
<SET DIR ,P?WEST>)
(<AND <L? .RROW .OROW> <L? .OROW 3>>
<SET DIR ,P?SOUTH>)
(<AND <L? .RCOL .OCOL> <L? .OCOL 3>>
<SET DIR ,P?EAST>)>
%<DEBUG-CODE
<COND (<ZERO? .DIR>
<TELL
"[BUG: Brown-eyed rock zero direction?]" CR
"[Blue: " N ,ROCK-LOC ", Brown: " N ,OTHER-ROCK-LOC "]" CR>)>>
<COND (<EQUAL? .DIR ,P?EAST>
<SET OCOL <+ .OCOL 1>>)
(<EQUAL? .DIR ,P?WEST>
<SET OCOL <- .OCOL 1>>)
(<EQUAL? .DIR ,P?SOUTH>
<SET OROW <+ .OROW 1>>)
(<EQUAL? .DIR ,P?NORTH>
<SET OROW <- .OROW 1>>)
(<EQUAL? .DIR ,P?NE>
<SET OROW <- .OROW 1>>
<SET OCOL <+ .OCOL 1>>)
(ELSE
<SET OROW <+ .OROW 1>>
<SET OCOL <- .OCOL 1>>)>
<SETG OTHER-ROCK-LOC <+ <* 4 .OROW> .OCOL>>
<COND (<IN? ,PLAYER ,OTHER-ROCK>
<SETG YOU-LOC ,OTHER-ROCK-LOC>)>
%<DEBUG-CODE <COND (,ZDEBUG
<TELL "[Brown: " N ,OTHER-ROCK-LOC "]" CR>)>>
<TELL
CTHE ,OTHER-ROCK " slides gracefully ">
<COND (<SET DIR <DIR-BASE .DIR ,DIR-DIR ,DIR-NAME>>
<TELL .DIR>)>
<TELL ,PERIOD>
%<DEBUG-CODE
<COND (<OR <L? .OROW 0>
<L? .OCOL 0>
<G? .OROW 3>
<G? .OCOL 3>
<AND <EQUAL? .OROW 0>
<EQUAL? .OCOL 0>>>
<TELL
"[BUG: Brown eyed rock off plain?]" CR
"[Blue: " N ,ROCK-LOC ", Brown: " N ,OTHER-ROCK-LOC "]" CR>)>>
<RTRUE>)>>
<ROUTINE I-STOP-SNEEZING ()
<SETG SNEEZY? <>>
<COND (<AND <EQUAL? ,HERE ,OGRE-CAVE>
<NOT <EQUAL? ,TIME-STOPPED? ,HERE>>
<NOT <EQUAL? ,ESPNIS? ,OGRE>>>
<TELL CR
"The pollen has settled out, and the ogre's sneezes abate.">
<OGRE-MAD>)
(<EQUAL? ,HERE ,CAVE-ENTRANCE ,OGRE-BEDROOM>
<TELL CR
"The sneezing noises have slowed in volume and frequency." CR>)>>
<ROUTINE OGRE-MAD ()
<TELL " He recovers his self-possession." CR>
<I-OGRE-KILLS-YOU>>
<ROUTINE I-WATER-RISING ()
<COND (<EQUAL? ,HERE ,PAST-RUINS-ROOM>
<COND (<EQUAL? ,PAST-WATER-FLAG 4>
<HYPOTHERMIA>
<RFATAL>)>
<QUEUE I-WATER-RISING 4>
<COND (<L? ,PAST-WATER-FLAG 4>
<SETG PAST-WATER-FLAG <+ ,PAST-WATER-FLAG 1>>)>
<COND (<IN? ,PLAYER ,ZIPPER> <RFALSE>)>
<TELL CR <GET ,WATER-TABLE ,PAST-WATER-FLAG>>
<COND (<EQUAL? ,PAST-WATER-FLAG 2>
<COND (<SOAK-STUFF ,HERE <>>
<TELL
" Items on the floor are wet and ruined, of course.">)>
<NOT-SITTING>)
(<EQUAL? ,PAST-WATER-FLAG 4>
<SOAK-PLAYER>)>
<CRLF>)>>
<GLOBAL PAST-WATER-FLAG 0>
<ROUTINE I-PRISON-GUARDS ()
<COND (<TIME-FROZEN?>
<QUEUE I-PRISON-GUARDS 2>
<RFALSE>)
(<EQUAL? ,HERE ,PAST-CELL-EAST>
<TELL
"Many nasty guards arrive">
<COND (<IN? ,PLAYER ,CABINET>
<TELL ", find you hiding in the cabinet,">)>
<TELL " and immediately (for their own protection, of
course) run you through with their swords." CR CR>
<TIME-SICK-CELL-EAST>)>>