! ---------------------------------------------------------------------------- ! 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 ! ---------------------------------------------------------------------------- Constant TASKS_PROVIDED; Constant NUMBER_TASKS 10; Global task_scores initial 5 5 10 10 20 10 10 10 20 40; Constant MAX_SCORE 150; Constant OBJECT_SCORE 2; Constant ROOM_SCORE 2; Include "VerbLib"; ! ---------------------------------------------------------------------------- ! ! 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; ! ---------------------------------------------------------------------------- ! ! Dismal Cottage ! ! ---------------------------------------------------------------------------- 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: <>; ], 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. "; <>; ], before [; Receive: <>; ], 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: <>; Wet: "A surreal idea."; ], has is_liquid; ! ---------------------------------------------------------------------------- ! ! GreenHouse ! ! ---------------------------------------------------------------------------- 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: <>; ], has static door; ! ---------------------------------------------------------------------------- ! ! Statue Room ! ! ---------------------------------------------------------------------------- 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."; ! ---------------------------------------------------------------------------- ! ! Taxedermist Shop ! ! ---------------------------------------------------------------------------- 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; ; give self animate; rtrue; ], after [; Drop: <>; ], 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: <>; ], door_dir d_to, door_to Staircase, has static door open; ! ---------------------------------------------------------------------------- ! ! Staircase ! ! ---------------------------------------------------------------------------- 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 and miscellaneous routines ! ! ---------------------------------------------------------------------------- [ 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; <>; ]; [ GetWithSub; ; "Frankly, your bare hands will do the job."; ]; Include "Grammar"; Verb "play" * held -> Blow; Verb "bury" "plant" * Is_bean -> Plant; Verb "water" * noun "with" Is_liquid -> Wet; Verb "pour" * Is_liquid "on" noun -> WetOn; Extend "cut" replace * noun "with" held -> Cut; Extend "fill" replace * container "with" Is_liquid -> Fill; Extend "screw" last * held "in" noun -> Insert; Extend "get" last * noun "with" container -> GetWith; end;