! ----------------------------------------------------------------------------
! Odieus's Quest for the Magic Flingshot
! ----------------------------------------------------------------------------
Switches xv5;
Constant Debug;
Constant Story "ODIEUS'S QUEST FOR THE MAGIC FLINGSHOT";
Constant Headline "^A LADS adventure downloaded from CompuServe,^\
converted to AGT and ~embellished~ by David Malmberg^\
converted to Inform 5.4 by Teo Kwang Liak^^";
Include "Parser";
Constant MAX_CARRIED 6; ! The player can carry at most 6 items
! ----------------------------------------------------------------------------
! The complete scoring system
! ----------------------------------------------------------------------------
! ----------------------------------------------------------------------------
!
! Area Flung
!
! ----------------------------------------------------------------------------
Object Area_Flung "Area Flung"
with description "This cool grassy area is where Zinness flung you. \
Apparently you are somewhere near Blackwing's Pit. To the south \
a glass structure glints in the sun, and a dismal cottage lies to \
the east.",
n_to Front_of_Pit,
s_to Greenhouse,
e_to Dismal_Cottage,
w_to Statue_Room,
has light;
Object Dismal_Cottage "Dismal Cottage"
with description
"The cottage's interior is rather nice, actually. A heavy marble \
table sits among ruby tiles, gold trimming lines ornate pillars, \
and the sapphire studded ceiling is garnished with a crystal \
chandelier.",
name "tiles" "pillars" "sapphire" "chandelier",
w_to Area_Flung,
out_to Area_Flung,
has light;
Nearby Silverware "beautiful silverware"
with name "beautiful" "silverware" "silver" "ware" "setting",
initial "There is a setting of beautiful silverware here.",
description "A fine set of silverware.",
has scored;
Nearby big_cup "big cup"
with name "big" "cup",
describe [;
if (self hasnt general) "^There is an empty cup here.";
"^You see a cup filled with water here.";
],
description [;
if (self hasnt general) "A big empty cup.";
"A big cup that's always filled to the brim with water.";
],
before [;
Fill: if (hot_spring hasnt general)
"Youch!! The water is so boiling hot that you can't bring \
the cup near it.";
if (child(self)~=0) "You ought to empty the cup first.";
move pond_water to big_cup;
remove hot_spring;
give self general;
"The water begins to fill the cup and doesn't stop till the \
whole pond dries up. It is amazing how the cup manage to \
hold all that water.";
Receive: if (self hasnt general) rfalse;
"The cup is already full.";
Letgo: <<Wet player>>;
],
has container open;
Nearby plate "plate"
with short_name [;
if (self has general) print "polished plate";
else print "dusty plate";
rtrue;
],
initial "A dusty plate lies in a dusty corner.",
parse_name [ i j;
if (self has general) j='polished'; else j='dusty';
while (NextWord()=='plate' or j) i++;
return i;
],
before [;
Rub: if (self has general) "It is as polished as it can be.";
"Your best polishing effort has no effect on the dusty plate.";
];
Nearby Cabinet "wooden cabinet"
with name "wooden" "cabinet",
when_closed "A wooden cabinet is fixed to the wall. It is closed.",
when_open [ x;
print "The wooden cabinet has been opened. ";
x = children(self);
if (x == 0) "Its shelves are empty.";
print "On its shelves ";
if (x == 1) print "is "; else print "are ";
x = FULLINV_BIT + ENGLISH_BIT + RECURSE_BIT;
WriteListFrom (child(self), x, 1); print ".";
],
with_key diamond_key,
has openable container lockable openable locked static;
! --
! Contraption
! --
Object contraption "contraption" cabinet
with name "contraption" "machine", article "some kind of a",
description [;
print "The contraption is made of stainless steel, has a slot \
about six inches long, a lever is attached to it's side, and a \
sign is pasted onto it. "; <<examine slot>>;
],
before [;
Receive: <<Insert noun slot>>;
],
has static transparent;
Nearby slot "slot"
with name "slot",
before [;
Receive: if (noun~=plate) { CDefArt(noun); " does not fit the slot.";}
Letgo: move noun to player;
"Taken. (You noted that the machine has done a great \
plate-polishing job.)";
],
has container open;
Nearby sign "sign"
with name "sign",
description "I'm sorry, it's written in Polish.";
Nearby lever "lever"
with name "lever" "handle",
before [;
Push, Pull, Turn:
if (plate in slot && plate hasnt general) {
give plate general;
Achieved (1);
}
"That started the machine humming. A few moments later \
it quiets down and the lever springs back to its original \
position.";
];
! ----------------------------------------------------------------------------
!
! Pleasant Meadow
!
! ----------------------------------------------------------------------------
Object Pleasant_Meadow "Pleasant Meadow"
with name "grass" "zephyrs" "yews",
description "This is the beginning of a pleasant meadow that continues \
to the east. Tall grass is swept with soft zephyrs, whistling through \
the elegant yews which surround you. There is a particularly large \
oak on your right. A glass structure glints in the sun to \
the west.",
e_to End_Of_Meadow,
w_to GreenHouse,
has light;
Nearby Dwarf "gruff-looking dwarf"
with initial "Sitting on a nearby tree stump is a gruff-looking dwarf.",
description "Huge fingers stroke a fiery red beard as he hums a \
gruff tune. A double edged axe is strapped to his side.",
each_turn [;
if (random(5)==2) rtrue;
if (silverware in player) "^The dwarf seems to steal glances at you \
while you're not watching.";
"^~HiHo, HiHo...~, hums Gruffy, the dwarf.";
],
name "gruff-looking" "gruffy" "dwarf" "midget",
life [;
Give: if (noun == silverware) {
remove silverware;
move axe to location;
remove dwarf;
"Giving the silverware to the dwarf must have caught \
his attention, since he tosses you his axe in return \
and walks jubiliantly away. You hear him mumble \
something about the ingenious financial abilities \
of magicians.";
}
Attack: "He's the one holding the axe, not you!";
Kiss: "~Touch me and you die.~";
Ask, Answer, Show: "The dwarf nonchantly pulls his beard.";
],
has animate transparent;
Nearby oak "oak tree"
with name "large" "huge" "oak" "tree",
before [;
Cut: if (self has general) rfalse;
if (second ~= axe) {
print "You planned to chop the big oak with "; DefArt(second);
"?";
}
give self general ~concealed;
move oak_branch to Pleasant_Meadow;
"The tremendous oak sways, hovers dangerously, then topples \
to the ground with a loud CRASH.";
Take, Push, Turn:
if (self has general) "The oak is too heavy for your puny muscles.";
"The oak tree is firmly rooted to the ground.";
Letgo, Receive:
if (self hasnt general) "The branches are beyond your reach.";
],
after [;
Letgo: if (noun == diamond_key && noun hasnt moved) Achieved(0);
],
describe [;
if (self hasnt general) rfalse;
"^Lying on it's side amidst the tall grass is a huge oak.";
],
description [;
if (diamond_key in self) "At the very tip of one long branch \
dangles a diamond encrusted key!";
"Just like any other ordinary oak tree you've encountered.";
],
has static concealed supporter;
Object oak_branch "branch"
with name "branch" "stick" "wood" "firewood" "torch" "burning" "broken",
short_name [;
if (self has light) print "burning torch"; else print "broken branch";
rtrue;
],
description "A thick piece of branch that was broken off from an oak \
tree.",
before [;
Burn: if (location~=Grand_Hallway)
"There is no fire to light the branch.";
if (self has general) "The wood is already burnt up.";
StartTimer(self, 20); give self light general;
"Lighting the branch turns it into a handy torch. It won't last \
long, however.";
],
time_left 0,
time_out [;
give self ~light;
"Your torch finally burns up.";
];
Object diamond_key "diamond encrusted key" oak
with name "diamond" "encrusted" "sparkling" "key";
Object axe "double-edged axe" Dwarf
with name "sharp" "double" "edged" "double-edged" "axe",
describe [; "^A double-edged axe is embedded in the ground.";],
description "A very sharp tree-chopping tool.",
has scored;
! ----------------------------------------------------------------------------
!
! End of Meadow
!
! ----------------------------------------------------------------------------
Object End_of_Meadow "End of Meadow"
with description "You have reached the end of the pleasant meadow that \
started from the west. The grass over here is curiously singed at \
the bottom.",
before [;
Swim: "It is wiser to heed the sign.";
],
w_to Pleasant_Meadow,
has light;
Nearby Hot_Spring "hot spring"
with name "hot" "bubbling" "spring" "pond" "steam",
describe [;
print "^There is a ";
if (self has general) "pool of cool water here.";
"hot spring here: bubbling violently and giving off steam.";
],
has static enterable container transparent;
Nearby wooden_sign "wooden sign"
with name "wooden" "sign" "writing" "writings",
initial [;
print "A large wooden sign stands besides the ";
if (Hot_Spring has general) "pond of cool water.";
"hot spring.";
],
description "The sign reads ~D A N G E R - - - N O S W I M M I N G~.",
has static;
Attribute Is_liquid;
Object pond_water "water" Hot_Spring
with name "water" "fluid" "liquid", article "some",
description "Crystal clear, probably drinkable.",
before [;
Drink: "You take a few sips and find the water refreshing.";
Take: "The only thing you will get is wet if you don't use a \
container.";
GetWith: <<Fill second noun>>;
Wet: "A surreal idea.";
],
has is_liquid;
Object Greenhouse "Green House"
with n_to Area_flung,
e_to Pleasant_meadow,
u_to 0,
description [;
print "The greenhouse contains a variety of exotic plants, \
tropical greenery. In the middle of some purple-black shrubs \
sits ";
if (small_plant in self) print "a recently "; else print "the only ";
"empty plot, beside which is growing a banana tree.";
],
has light;
Nearby banana_tree "banana tree"
with name "banana" "fruit" "tree",
description [;
if (green_bananas notin self)
"Someone has stolen all the bananas from the tree. It is now as \
bare as a new-born baby.";
"It is bulging with banana clusters, all of which are as \
hard as rock.";
],
before [;
Receive: "You can't put anything on the banana tree.";
],
has scenery container open;
Nearby flat_reed "thin flat reed"
with name "thin" "flat" "reed";
Object green_bananas "green bananas" banana_tree
with name "green" "unripe" "banana" "bananas" "fruit" "fruits"
"cluster" "clusters", article "some",
describe [; "^Some green bananas are scattered around.";],
before [;
Eat: "Try as you might, you are unable to remove the peel.";
],
has edible;
Object Small_Plant "plant"
with short_name [;
if (self has general) print "tall plant"; else print "small plant";
rtrue;
],
name "small" "tall" "plant" "beanstalk" "stalk",
describe [;
if (self has general)
"^A tall, healthy, and bright green beanstalk stretches high into \
the heavens. It is bursting with enormous beans and leaves, all \
too large to handle.";
"^There is a four-foot-high plant occupying the plot.";
],
door_dir 0,
door_to 0,
before [;
Wet: if (self has general)
"I think the plant has enough water for the time being.";
give self general door open;
self.door_dir=u_to; self.door_to=Over_GreenHouse;
GreenHouse.u_to= self;
remove pond_water; give big_cup ~general;
"The plant shudders visibly, then all of a sudden shoots up in \
a long, green streak of leaves and zips through the ceiling. \
You cannot see where it ends.";
Climb: <<Go u_obj>>;
],
has static door;
Object Statue_Room "Statue Room"
with e_to Area_flung,
w_to [; if (plate in player && plate has general) {
self.w_to=Sphinx_room;
Achieved(2);
print "You walk in holding the polished plate over your face. \
The sphinx catches sight of it's own face reflected in the \
mirror-like surface of the plate and turns to dust.^";
return sphinx_room;
}
Deadflag=1;
"^Facing you is a deadly stone guardian-sphinx. It has you \
fixed with it's fatal stare. You recall from your college \
lectures the result of meeting the sphinx's gaze - instant \
stonification.";
],
description "This grey area is filled with stone sculptures of \
all types of creatures. Upon closer examination you note they \
are extraordinarily well carved. A strange feeling you usually \
don't get in museums comes over you.",
has light;
Nearby warning_in_statue_room "warning sign"
with initial "A warning sign hangs above the entrance to the west.",
name "stone" "warning" "sign" "poster",
description
"The sign depicts the usual skull-and-crossed-bone sign. It is \
carved out of stone.",
has static;
Nearby sculptures "sculptures"
with name "stone" "statues" "sculpture" "sculptures" "creatures"
"statues" "statue",
description "Too life-like to be sculpted by hands."
has scenery;
Object Sphinx_Room "Sphinx Room"
with e_to Statue_Room,
out_to Statue_Room,
w_to Guarded_Cell,
in_to Guarded_Cell,
description "The room you've just entered is totally bare of all \
furniture. It is colored grey, and filled with dust.",
has light;
Object Guarded_Cell "Guarded Cell"
with e_to Sphinx_room,
out_to Sphinx_room,
description "This is a small cell whose walls are composed of a \
massive inter-twining of trailing vines which convene above you \
in a big tangle of leaves and ivy.",
has light;
! ----------------------------------------------------------------------------
!
! Bean class definition
!
! ----------------------------------------------------------------------------
Attribute Is_bean;
Class Bean_Class
with description "You recognize them as part of the magic bean family, \
classed by the revered magi-biologist, Jack son of Jackyl, under \
Aurius Stawcus. Two of them have different properties, but you \
can't remember what the properties are.",
parse_name [ i j;
for (::)
{ j=NextWord();
if (j=='bean' or 'seed' or 'pod' || j==self.name) i++;
else
{ if (j=='beans' or 'seeds' or 'pods')
{ parser_action=##PluralFound; i++; }
else return i;
}
}
],
has is_bean;
Nearby bean1 "white bean"
class Bean_Class
with name "white";
Nearby bean2 "green bean"
class bean_class
with name "green",
before [;
Plant: if (location~=GreenHouse && location ~=End_of_Meadow) rfalse;
if (location==GreenHouse) {
remove self;
move small_plant to GreenHouse;
Achieved(4);
"A few seconds after planting the beans, a greenish plant \
emerges and struggles to a height of about four feet.";
}
"You threw the bean into the bubbling hot water and waited. \
A minute later, the water spits out the green bean which \
travels in a graceful arc and lands right back into your \
hand. Nothing else interesting has happened.";
];
Nearby bean3 "blue bean"
class bean_class
with name "blue",
description "You recognize them as part of the magic bean family, \
classed by the revered magi-biologist, Jack son of Jackyl, under \
Aurius Stawcus. Two of them have different properties, but you \
can't remember what the properties are.\
^^The blue beans are cold to the touch.",
before [;
Plant: if (location~=GreenHouse && location~=End_of_Meadow) rfalse;
if (location==End_of_Meadow) {
remove self;
give Hot_Spring general;
Achieved(3);
"The beans sinks slowly to the bottom of the hot springs. \
The bubbling recedes and at length ceases. After a while, \
the steam from the hot springs disappears.";
}
"As soon as you planted the blue bean, the temperature of the \
greenhouse started to fall rapidly. Somewhere an alarm \
sounded, and the soil spits out the blue bean which \
travels in a graceful arc and lands right back into your \
hand. Nothing else interesting has happened.";
];
! ----------------------------------------------------------------------------
!
! front of the Pit
!
! ----------------------------------------------------------------------------
Object Front_of_Pit "In Front of Pit"
with s_to Area_flung,
description "Before you, spiralling downward, lies the great black \
maw of Blackwing's Pit.",
n_to GorillaSub,
d_to GorillaSub,
has light;
[ GorillaSub;
if (Gorilla notin Front_of_Pit) {
move gorilla to Front_of_Pit;
"A portly gorilla emerges from the Pit's depths and bars your way.^^\
~Comin' to see the old boy, eh?~ the gorilla chuckles, ~Jolly good! \
Er - there is the small matter of a tiny fee, of course. Purely for \
entry purposes, you understand...~ He beams good-naturedly.";
}
if (Gorilla hasnt general) "A hairy arm blocks your way. ~The fee, sir?~";
return Grand_Hallway;
];
Object gorilla "stout gorilla"
with name "stout" "gorilla" "ape" "monkey" "hairy",
describe [;
if (self has general)
"^Off to one side is a happy gorilla gaping awe-stricken at a golden \
banana.";
"^There is a stout gorilla here, waiting expectantly.";
],
description "The gorilla is covered with black fur, skin, muscles, \
veins, and whatever else gorillas are usually covered with. Most \
of his face is covered with a stupid grin. You assume he is stronger \
than you are.",
life [;
Give: if (noun~= golden_banana)
"The gorilla looks at your offering disdainfully. ~Surely, \
you can do better than that,~ he yawns.";
move noun to self;
give self general;
self.each_turn=0;
Achieved (5);
"The gorilla's nostrils open wide. ~Umm...er...that'll do \
nicely,~ he manages, relieving you of your fee. He stumbles \
over to the side and stares at it, drooling in admiration.";
Attack: "The lost of your flingshot must have affected your brain.";
Kiss: "~An entry fee, sir, not a sexual favour!~";
Answer: if (special_word=='hello' or 'hallo' or 'hi')
"~A good day to you, sir. Bought anything for me?~";
"The gorilla grins stupidly at you";
Order: "~I'm sorry but I was expelled from the obedience school \
the old boy has send me. I wasn't good at following orders, \
you see.~";
],
each_turn [ i;
if (self has general) rtrue;
if (random(3)~=1) rtrue;
print "^The gorilla ";
i=random(3); if (i==1) "picks his teeth.";
if (i==2) "scratches his armpits.";
"absentmindedly searches for fleas in his fur.";
],
has animate transparent;
!-----------------------------------------------------------------------------
!
! Grand Hallway
!
!-----------------------------------------------------------------------------
Object Grand_Hallway "Grand Hallway"
with n_to Dining_Room,
e_to Hex_Room,
w_to Taxedermist_shop,
u_to Front_of_Pit,
description "You are standing in the grand hallway of the Pit. \
Faint light comes from an opening above you. Large open doorways \
beckon from three sides. A fireplace burns behind you.",
has light;
Nearby Fireplace "fireplace"
with name "fire" "fireplace",
description "The fire is blazing brightly. It warms the room cheerfully.",
has scenery;
Nearby threaded_object "threaded object"
with name "threaded" "object",
description "The object is about one inch long, round, one inch in \
diameter, and threaded at one end.";
Object Taxedermist_Shop "Taxedermist Shop"
with e_to Grand_Hallway,
out_to Grand_Hallway,
description "This appears to be a taxedermist display area. Stuffed \
creatures abound everywhere with plaques marking them below.",
name "bulbs" "flourescent" "bulb" "creatures" "stuffed",
has light;
Nearby Plaques "plaques"
with name "plaques" "plaque",
description "All written in Latin and you cannot understand a word of it.",
has scenery;
Nearby bird "bird"
with name "sleeping" "bird",
initial "Oddly enough, there is a bird here who is very much alive. \
It is sleeping.",
description "The bird has a long beak, blue-green feathers, and sharp \
talons. It is presently asleep.",
before [;
WakeOther:
if (location==taxedermist_shop)
"The bird wakes up, finds itself in familiar surroundings, and \
goes back to sleep again.";
move self to taxedermist_shop; give self ~moved;
"With a deafening SKRAKIT, the bird spreads its wings and \
flies away.^";
Take: if (self hasnt animate) rfalse;
give self ~animate;
<Take self>;
give self animate; rtrue;
],
after [;
Drop: <<WakeOther bird>>;
],
has animate;
Object Dining_Room "Dining Room"
with s_to Grand_Hallway,
e_to Living_Room,
w_to [; StartTimer(lions,5); return Den;],
n_to 0,
after [;
Go: if (noun~=e_obj || fur_coat has worn) rfalse;
StopTimer(lions);
if (player has light) print
"^The lions chase you out of the den but go no further...^";
],
description [;
print "An oval table and satin seats mark this room as the \
dining room. The exits to the east and west are labeled, \
respectively, living room and den. ";
if (brass_ring has general)
"A section of the wall has opened to reveal a closet \
to the north."; else new_line;
],
name "table" "seats" "satin" "oval";
Nearby brass_ring "brass ring"
with name "brass" "ring",
initial "A brass ring is attached to the east wall.",
before [;
Pull, Push, Take: "It resists your attempts to move it. Maybe you \
should twist it.";
Turn: if (self has general) {
give self ~general;
Dining_Room.n_to=0;
"The section of the wall slides smoothly close and the \
closet disappears from view.";
}
give self general;
Dining_Room.n_to=Elevator;
Achieved(7);
"A section of the wall slides smoothly open. There is now a \
closet to the north.";
],
has static;
! ----------------------------------------------------------------------------
!
! Den
!
! ----------------------------------------------------------------------------
Object Den "Den (of Lions)"
with e_to Dining_Room,
ne_to [; if (fur_coat has worn) return Behind_Den;
"I'm afraid you'll have to get past the lions first";] ,
description "This is obviously the den. A family of lions \
are presently occupying the room. Behind them to the northeast is an \
open doorway.",
each_turn [;
if (fur_coat has worn || location~=Den) StopTimer(lions);
if (player hasnt light) "^You hear the blood curdling growls of \
some creatures.";
if (fur_coat hasnt worn)
"^The lions growl hungrily.";
],
before [;
Blow: if (noun~=magic_horn || flat_reed notin magic_horn) rfalse;
"Whoever said that ~Music sooths the savage beast~ obviously \
didn't know about these lions. They stare at you in \
disbelief as you blow your silly little horn.";
Wear: if (noun~=fur_coat) rfalse;
StopTimer(lions);
print "The lions stop growling.^";
Disrobe: if (noun~=fur_coat) rfalse;
DeadFlag=1;
"^Removing your fur coat is a big mistake. The lions soon \
realised that they have been tricked. The only consolation \
is that your death is swift.";
];
Nearby Lions "lions"
with name "lions" "beasts" "lion" "beast" "lioness" "cub" "cubs",
article "a pack of",
describe [;
if (fur_coat has worn)
"^A pack of lions are flattened against the wall, staring at you \
with much fear.";
"^The ferocious-looking lions are glaring at you for disturbing them.";
],
description [;
if (fur_coat has worn)
"The lions seem to hold the wearer of the fur coat in awe. In \
fact they looked terrified.";
"They seem ready to tear you to pieces any time.";
],
time_left 0,
time_out [;
DeadFlag=1;
if (player has light) print "^The lions "; else print "^The unknown \
creatures ";
"decided that they cannot wait any longer. What follows \
is a little gruesome, let's say it involves some screaming and a \
bit of bloodshed. One thing is for sure:";
],
life [;
Show: if (fur_coat has worn) "The lions back off in fear.";
if (noun==fur_coat)
"The lions frown as if they vaguely recognised the fur coat. \
The frown was soon dispelld by growls as hunger overrules \
the attempts to think.";
print "The lions look at ";DefArt(noun);" hungrily.";
Attack: if (fur_coat has worn)
"They back off in fright, leaving you clear passage to \
the doorway.";
"The lions will tear you to shreds. Definitely.";
ThrowAt: if (fur_coat has worn) "Leave the frightened kittens alone, \
you big bully!";
"There are too many lions to be dealt with by one throw.";
Kiss: if (fur_coat has worn) "Don't push your luck.";
"Losing your head, aren't you?";
Order: "These lions are definitely not circus-trained.";
Give: if (fur_coat has worn) "The lions back off in fear.";
"It is doubtful that the lions will appreciate your \
show of generosity.";
],
has animate;
! ----------------------------------------------------------------------------
!
! Living Room
!
! ----------------------------------------------------------------------------
Object Living_Room "Living Room"
with w_to Dining_Room,
description [;
print
"This is the living room. It is rather strange, since \
everything here seems to be alive. The chairs are singing, the \
lamp fixture is sweeping the carpet, and the air conditioner is ";
if (oak_branch has light) {
if (oak_branch in self || oak_branch in player) "coughing from your \
torch's smoke."
}
"wheezing from a asthma attack.";
],
before [;
Blow:
if (talking_door has open || noun~=magic_horn || flat_reed notin magic_horn)
rfalse;
give talking_door open;
self.n_to=talking_door;
"The door's black mood is suddenly replaced by a cheerful \
one. ~Trying to get through?~ it observes, ~my pleasure.~ \
It opens wide.";
],
n_to "You interrupted a conversation going on between the door \
and the window. That made the door quite furious, and I doubt \
he'll let you through.",;
Nearby talking_door "door"
with name "talking" "door",
initial "To the north, a door is hob-knobing with the fixtures.",
door_to power_room,
door_dir n_to,
has door talkable static;
Nearby musical_chair "musical chair"
with name "musical" "chair" "chairs",
description "It seems to be a musical chair, since it is participating \
in a chorus of other chair-voices.",
has scenery animate;
Nearby Air_conditioner "air-conditioner"
with name "air" "con" "air-con" "air-conditioner" "conditioner",
description "Seems to be in poor health.",
has scenery;
Nearby Lamp_fixture "lamp fixture"
with name "lamp" "fixture",
description "A rather diligent fellow.",
has scenery;
Nearby magic_horn "magic horn"
with name "magic" "horn" "musical" "instrument" "Quatikus" "music",
describe [; "^Someone left a black horn on the floor.";],
description "The lovely black horn comes from the goat species \
Quatikus, and, if fitted with the proper reed, it supposedly will \
calm all anger and sooth savage beasts.",
before [;
Receive: if (noun==flat_reed) rfalse;
"Only a reed can fit into the horn.";
Blow: if (flat_reed notin self) "~Pzzt!~";
"As you play the horn, you feel a sense of calm over you.";
],
has container open;
! ----------------------------------------------------------------------------
!
! Power Room
!
! ----------------------------------------------------------------------------
Object Power_Room "Power Room"
with s_to Living_Room,
out_to Living_Room,
description [;
print "This area appears to be the power source for the entire \
Pit complex. Pipes and wires are strewn about, and there is a \
series of holes on the far end, all occupied";
if (self hasnt general) " save one."; else ".";
];
Nearby power_hole "hole"
with name "hole" "holes",
description [;
if (self hasnt transparent) {
print "About an inch in diameter. It ";
if (child(self)==0) "is empty.";
print "contains ";DefArt(child(self));".";
}
"All the holes are occupied.";
],
capacity 1,
after [;
Receive: if (noun~= threaded_object) rfalse;
give self transparent ~container ~open;
give power_room general;
give player light;
Achieved(6);
"The object is a perfect fit. In fact, it seems to be \
stuck in the hole. And, oh yes, the entire room has \
lighted up.";
],
has container open scenery;
! ----------------------------------------------------------------------------
!
! Behind Den
!
! ----------------------------------------------------------------------------
Object Behind_Den "Behind Den (of Lions)"
with sw_to Den,
out_to Den,
description "You are behind the den of lions. Whatever they were \
placed there to guard must have already been removed, as there \
doesn't seem to be anything of value about.",
has scored;
Nearby paper "crumbled paper"
with name "crumbled" "paper", article "a piece of",
description "Someone has scribbled something on it: ~All keys grow \
on trees.";
! ----------------------------------------------------------------------------
!
! Elevator
!
! ----------------------------------------------------------------------------
Object Elevator "Elevator (cum closet)"
with s_to Dining_Room,
out_to Dining_Room,
n_to 0,
description "You are in a tight closet, presumably the elevator. \
A red button is on the wall.",
has light;
Nearby red_button "red button"
with name "red" "button",
description "Big, red button. Designed to be pushed.",
before [;
Push: if (elevator has general) {
give elevator ~general;
elevator.s_to=Dining_Room;
elevator.n_to=0;
elevator.out_to=Dining_Room;
};
else {
give elevator general;
elevator.s_to=0;
elevator.n_to=Large_Cavern;
elevator.out_to=Large_Cavern;
};
"The door closes and you feel yourself moving for a few \
minutes. Then the door slides open again.";
],
has scenery;
Nearby fur_coat "expensive fur coat"
with name "expensive" "fur" "coat", article "an",
initial "A coat has been carelessly discarded on the floor.",
description "Oh my, a fur coat sewn from an entire lion skin.",
has clothing scored;
! ----------------------------------------------------------------------------
!
! Large Cavern
!
! ----------------------------------------------------------------------------
Object Large_Cavern "Large Cavern"
with s_to Elevator,
d_to 0,
cant_go [;
if (self has general)
"You explore the rest of the cavern, carefully avoiding the \
30 feet radius that contains the giant, but find no other \
exit.";
"You explore the rest of the cavern but find no other exit";
],
description "This is a tremendous cavern. There is a stifling \
stench in the air. The elevator is back south.",
before [;
Drop, WakeOther: if (noun==bird) give self general;
Smell: "A disgusting idea.";
],
after [;
Go: if (oak_branch hasnt light) rfalse;
give oak_branch ~light;
StopTimer(oak_branch);
print "^As you enter the cavern, a strong draft smelling of \
beer blows out your torch...^";
];
Nearby Giant "tall giant"
with name "tall" "wide" "deep" "giant" "socks" "sock",
initial "A 20 feet tall, wide and deep giant is snoring gratingly \
over here.",
each_turn [;
if (large_cavern hasnt general) rtrue;
remove self;
move flight_of_stairs to large_cavern;
large_cavern.d_to=flight_of_stairs;
Achieved(8);
"The eyes of the giant open wide. Then, upon catching sight of \
you, they open wider. Wildy and speechlessly gesticulating in \
horror, it bounds to its feet and scrambles bellowing out of \
the room.\
^^As the dust settles, you see a flight of stairs that was \
covered by the giant.";
],
description "A 20 foot tall, wide and deep giant is snoring gratingly \
over here. At every breath you are consumed by a fog of beer-black \
breath. In addition to his breath, his socks give off an odor that \
almost knocks YOUR socks off.",
before [;
if (Action==##Examine) rfalse;
"I wouldn't go within ten feet of those socks if I were you. \
You could die from the stench.";
],
has animate;
Object Flight_of_Stairs "stairs"
with name "flight" "stairs" "staircase" "steps",
initial "A flight of stairs plunges downward.",
before [;
Climb: <<go self>>;
],
door_dir d_to,
door_to Staircase,
has static door open;
Object Staircase "Staircase"
with u_to Large_Cavern,
d_to [; if (keyholes has general) {
Deadflag=2;
"This is Blackwing's safe. Buried among his various \
treasures is your precious flingshot. You grab the \
flingshot (with a fair helping to some spoils) and fling \
yourself back home.";
}
return 0;
],
description "This is the bottom of the rickety staircase.";
Nearby keyholes "keyholes"
with name "keyholes" "holes" "keyhole" "hole",
initial "Before you stands a wooden wall, studded with many large \
keyholes.",
description " The keyholes run from bottom to top, and are \
extraordinarily big.",
before [;
Receive:
if (noun~=green_bananas) "The keyholes are of the wrong size.";
give self general;
Letgo: give self ~general;
],
after [;
Receive: Achieved (9);
"The bananas are now in the holes. I know this is \
difficult to believe, but the bananas acted as a key \
and caused a secret passageway to open revealing a \
staircase leading downward.";
Letgo: "The secret passageway disappears.";
],
has static container open;
! ----------------------------------------------------------------------------
!
! Hex Room
!
! ----------------------------------------------------------------------------
Object Hex_Room "Hex Room"
with w_to Grand_Hallway,
out_to Grand_Hallway,
description "This room is shaped like a hexagon. It is colored red, \
the overhead lights are shattered, and the floor has a colorful \
mosiac.";
! ----------------------------------------------------------------------------
!
! Over the greenhouse
!
! ----------------------------------------------------------------------------
Object Over_Greenhouse "Above the Greenhouse"
with d_to Greenhouse,
u_to On_Cloud,
cant_go "You're on a beanstalk! You can only go up or down this \
gigantic plant.",
description "You are about one quarter up the tall beanstalk, and \
200 feet above the greenhouse."
has light;
Object On_Cloud "On Cloud"
with d_to Over_GreenHouse,
cant_go "Down is more likely.",
description "This is where the tall beanstalk thins out. Only the tip \
emerges amongst the fluffy white clouds. It is rather \
silent up here.",
has light;
Nearby golden_banana "golden banana"
with name "golden" "banana" "fruit",
initial "There is a golden banana here, glistening in the light.",
description "Pure gold. Clouds may not have a silver lining but they \
sure have golden bananas.",
before [;
Eat: "You almost broke your tooth: this banana is made of gold.";
],
has edible scored;
Object Middle_Stalk "beanstalk"
with name "beanstalk" "plant" "tall",
found_in over_greenhouse on_cloud,
Before [;
climb: "Just say ~up~ or ~down~ will do.";
cut: "It is prudent not to cut the plant that you're on.";
],
has scenery;
[ Initialise;
location = Area_Flung;
print "^^^^^INTRODUCTION\
^ You are Odieus, son of Odielle of the ancient Winwood family. \
Coming from a long line of sorcerors and enchantresses, you \
naturally undertook the presevation of your ancestric traditions. \
In Oxvord you majored in casting spells and you received you Phd in \
Effective Cursing and Spell Flinging.\
^ Just two zifs ago, your bitter archenemy Blackwing son of \
Blackfeather has deviously contrived to seperate you from the most \
important instrument of your field - your magic flingshot. Being an \
expert Filcher, he has successfully executed his evil designs. But \
you don't panic, you keep calm. Only after scrambling through the \
village yelling at the top of your lungs and frantically \
searching through every nook and cranny for a clue, do you finally \
decide to consult your friend and fellow Flinger, Zinness son of \
Zinnesess.\
^ Having reclined liesurely on his plush velvet sofa and chatted \
comfortably for about half a zif, he advises you to pursue Blackwing \
and obtain eternal vengeance. You bravely undertake the mission and \
declare your absolute confidence, but oddly you can't stand up since \
your knees are shaking too much. When you recover, Zinness takes you \
into his flingroom and transports you somewhere near Blackwing's \
abode; that is, the Pit.^^";
];
[ PrintTaskName ach;
if (ach==0) "retrieving the diamond key";
if (ach==1) "polishing the plate";
if (ach==2) "turning the sphinx into dust";
if (ach==3) "cooling the hot spring";
if (ach==4) "planting beanstalk";
if (ach==5) "bribing the gorilla";
if (ach==6) "restoring the power";
if (ach==7) "discovering the secret elevator";
if (ach==8) "waking the giant";
if (ach==9) "opening Blackwing's safe";
];
[ PrintRank;
print ", earning you the rank of ";
if (score >= 150) "Enchanter.";
if (score >= 100) "Master Flinger.";
if (score >= 70) "Effective Curser.";
if (score >= 50) "charlatan.";
if (score >= 10) "amateur magician.";
"a Filcher.";
];
! ----------------------------------------------------------------------------
!
! The Grammar and its extensions
!
! ----------------------------------------------------------------------------
[ PlantSub;
"I wouldn't consider this a suitable place to start your agricultural \
experiments. Perhaps some other place where the environment is friendlier.";
];
[ WetSub;
print "You will only get ";DefArt(noun); " wet.";
];
[ WetOnSub;
<<Wet second noun>>;
];
[ GetWithSub;
<Take noun>;
"Frankly, your bare hands will do the job.";
];