!Michael Berryman !CIS 487 !M-W 435-550 !Inform Game Constant Story "^Ogre Woes^"; Constant Headline "^by Michael Berryman^"; !Constant DEBUG; Constant MAX_SCORE = 59; Constant OBJECT_SCORE = 2; Constant ROOM_SCORE = 5; Constant MAX_CARRIED = 14; Include "parser"; Include "verblib"; Include "grammar"; !Define knocking (Not necessary in game, but will give clue about Fluffykin's house). [ KnockSub; if (noun == nothing) "You imagine a surface and proceed to knock upon it quite professionally. Go You!"; if (noun has door) "KnockKnockKnock. Boy howdy that's some good knockin!^";]; Verb 'knock' * -> Knock * 'on' noun -> Knock; !Define playing (used for playing instruments, particularly the bugle to wake up fluffykin) [ PlaySub; if (noun == nothing) "You pause for a minute to play with your inner child. Good for you."; if (noun hasnt playable) "You're not quite sure how to go about doing that...";]; Verb 'play' * -> Play * noun -> Play; !extend the tell verb so that telling an npc about something will be, in effect, asking them about it instead. Extend 'tell' replace * creature 'about' topic -> Ask; !create a talk verb so that player can talk to a character, in effect asking them about something. Verb 'talk' * 'to' noun -> Ask * 'to' noun 'about' topic -> Ask; !user define attributes Attribute empty; Attribute solved; Attribute smelly; Attribute playable; Attribute poisonable; Attribute explosive; !Start location and introduction [ Initialise; location = Your_House; give player smelly; !move Poison to player; !move Dead_Rat to player; !move Vial to player; !move Lamp to player; !move Perfume to player; !move Doll to player; !move Prison_Key to player; !move Matches to player; !move Gun_Powder to player; print "^^^~...UP! WAKE UP!~^You squint against the brightening sunlight of the morning and mumble in irritation as you're violently shook into consciousness by your next-door neighbor.^~Your girlfriend has been kidnapped! BY AN OGRE!~^That catches your attention as you spring forth from the covers of your bed with panic and alarm. Your neighbor, seeing you are now awake, quickly loses interest in the situation and goes to tend to his turnip garden. You, however, MUST SAVE YOUR GIRLFRIEND!^^"; ]; !First room, starting room Object Your_House "Your House" has light with name "house" "room" "home", description "Sunlight pours in through the eastern window of this one room house, illuminating the interior of your modestly comfortable home. The bed, covers dishelved from your hasty rise, resides in the northeastern corner, and the stove has claimed the sothwestern corner of the house as its own. Two piles of clothes lay at the foot of your bed - one clean clothes, the other dirty. You can't remember which is which. The cabinets mounted on the southern wall are shabbily built, evidence of your own craftsmanship, and a peg board hangs on the western wall, for visitors to hang their coats.", w_to Town_Square, out_to Town_Square; !A useless object Object Bed "Bed" Your_House has static scenery concealed supporter enterable with name "bed", description "Your sheets are a mess, owing to your hasty and ill-informed rise this morning. Oh well, you don't have time to make it now...you have a girlfriend to save!", before[; take: "You would, except you nailed it to the floor. When you were drunk."; search,lookunder: "There's some dirty underwear underneath the bed. Gross."; ]; !A useless object Object Coat "Well-Maintained Coat" Your_House has clothing with name "coat" "girlfriend^s coat" "well-maintained coat", description "It's a coat owned by your girlfriend and forgotten at your place during one of your nights of passion. It's really warm and pink.", before[; take: give self ~concealed; ]; !A useless object object Stove "Stove" Your_House has static scenery concealed with name "stove" "kitchen", description "It's the standard wood-burning stove of your town. It provides ample heat in the winter, when you and your girlfriend aren't providing it.", before[; open: "Yup, there's wood in there."; ]; !Cabinets that contain the cheese used to catch a rat. Replenishes self so you can get multiple cheese if needed Object Cabinets "Cabinets" Your_House has static concealed openable pluralname container with name "cabinets" "cabinet" "cupboard" "cupboards" "cuboards" "cuboard", description "These cabinets are the finest example of your woodworking. Currently, they are lopsided, held together with duct tape, rotting and painted polka dot. Yes sir, you sure are proud of them.", before[; open: if (self hasnt empty) { give self open; move Cheese to Self; "You open the cabinets, sending spiders scurrying into hiding and revealing a pile of moldy cheese."; } else { "Opening the cabinets reveals all that moldy cheese you remember from oh so long ago. But you already have some moldy cheese, and don't want anymore, so you close the cabinet."; } ], after[; close: if (self hasnt empty) { remove Cheese; "You close the cabinets, effectively hiding the cheese from view. You'll miss that cheese"; } examine: if (self hasnt open) { "The cabinets are closed."; } else { "The cabinets are open."; } ]; !Cheese used to catch a rat in the stockroom. Object Cheese "Cheese" with name "cheese", description "It's a moldy piece of cheese. You think. Only suitable for the rats", before[; eat: "Are you CRAZY!? You're not eating THAT!"; drop: remove cheese; give Cabinets ~empty; "You drop the cheese on the ground, and it disappears as some small rodent darts out of nowhere and snatches it up"; puton: if (second == Rat_Trap) { if (Rat_Trap in player) { "To do that, you would have to set the trap, and you don't want to do that while holding the trap."; } else { if (Rat_Trap notin Stockroom) { "There are no rats around here, so you don't see a point in setting the trap yet."; } } } else { "You don't see a point in doing that."; } ], after[; take: give Cabinets empty; give Cabinets ~open; "You take the cheese and close the cabinets, not wanting that smell to add to the already pungent odor inside your house"; puton: if (Dead_Rat in player) { move cheese to player; "You don't need another dead rat right now! One is enough!"; } if (Cheese in Rat_Trap && Rat_Trap in Stockroom) { move Dead_Rat to Stockroom; give Dead_Rat ~solved; remove Cheese; give cabinets ~empty; !give the cabinets the not empty attibute so you can get more cheese if needed "You place the moldy cheese on the rat trap, set the trap, and wait. Minutes later, a rat scurries out from the hole in the wall and makes a beeline for the cheese. The second it snatches the cheese in its jaws, the trap releases, swinging it's spring-loaded fury down upon the rat, snapping it's neck with a sickening crunch noise and killing it instantly."; } ]; !clothes hiding the rat trap needed to catch a rat Object Clothes "Pile of Clothes" Your_House has static concealed with name "pile" "clothes" "clothes pile" "pile of clothes", before[; examine, search: if (self hasnt empty) { move Rat_Trap to Your_House; give self empty; "A quick whiff tells you which pile of clothes is the dirty one. PHEW! What do you DO in your spare time, rough house with pigs!? Anyway, you notice a rat trap in the pile of CLEAN clothes (thank God)."; } smell: "You take a big, long whiff of your clothes. Yup, nothing like smelling one's own clothes to bring out the creepy in you."; ], description "Two piles of clothes. One dirty, one clean. Both currently very boring."; Object Rat_Trap "Rat Trap" has supporter scored with name "rat" "trap" "mouse" "mouse trap" "rat trap", description "A common rat trap. Nothing special."; !========================================== Object Town_Square "Town Square" has light with name "town" "square", description "The Town Square is really more of a circle, but someone said that is wouldn't be proper to call it Town Circle, and so it was named Town Square. There is a rather interesting and eye-catching fountain continuously spewing water in the center of the 'Square', and a couple children are already starting the day out by chasing each other around it. Around the circumference of the Square are various sorts of housing establishments, most of which are as shabby as yours and of no interest to you.^To the north lies a path to the forest on the outskirts of town, and southernly is an equally pathy trail to Old Man Fluffykin's secluded home.^ North-East is your neighbor's house, and South-East is your girlfriend's home. North-West is the blacksmith's establishment, while South-West boasts a general store. To the east is your home, and to the west is your favorite place of all: The Pub.", nw_to Smithy, ne_to Neighbors_House, se_to Girlfriends_House, sw_to General_Store, s_to South_Path, e_to Your_House, n_to North_Path, w_to Pub; !Fountain, in which is the money needed to buy the lamp Object Fountain "Fountain" Town_Square has container static concealed with name "fountain", before[; examine, search: if (self hasnt empty) { move Money to Town_Square; give self empty; "A typical old english style fountain. It may or may not have intricate sculptures spewing forth water from various places. Those places may or may not be appropriate place from which water should spew forth. It also may or may not be used as a wishing-well by the various children, as evident by the various coins strewn about within the clear water."; } ], description "A typical old english style fountain. It may or may not have intricate sculptures spewing forth water from various places. Those places may or may not be appropriate place from which water should spew forth. It also may or may not be used as a wishing-well by the various children."; !needed to purchase the lamp from the general store Object Money "Money" Fountain with name "coin" "coins" "money" "cash", description "A hand full of loose change that has been used over the last period-of-time-since-someone-last-looted-the-fountain by the kids to make wishes. They are imbued with the hopes and dreams of innocent children, hopeful to someday see their desires fulfilled. Good thing you got to them before some other shady theif could steal all their money. All $3.25 of it."; !A useless object object Children "The Children" Town_Square has animate concealed scenery static with name "child" "children" "kid" "kids", description "The town children are always a playful bunch, but you don't care much for children. You're too young for that right now! Currently, they're running around the fountain hitting each other in a game of tag.", before[; tell,ask: "The children ignore you, focusing intently on a lone bug crawling across the gravel."; ]; !========================================= Object Smithy "Blacksmith's Establishment" has light with description "It's the Blacksmith's workshop. It's hot in here. There's a few fires going along the back wall, all with some metal heating up within them. Pails of water sit next to the large anvils placed in front of each fireplace, and all manner of weaponry, armory, and other metaly things hang on the wall around the shop. There's a door to the west the leads behind the shop, and the entrance of the shop, to the south east. Tiny the Blacksmith is nowhere to be seen.", w_to Behind_Blacksmith_Shop, se_to Town_Square, out_to Town_Square, before[; Go: if (noun == w_obj && Smithy_Back_Door hasnt open) { "If you have found a way to pass through closed doors, please tell let us know!"; } ]; !A useless object Object Weaponry "Weaponry" Smithy has scenery concealed with name "weapon" "weapons" "weaponry" "sword" "swords" "axe" "axes" "mace" "maces" "spear" "spears" "club" "clubs" "dagger" "daggers", description "Very impressive-looking weaponry. All very sharp, all very deadly.", before[; take: "You've never wielded a weapon like that before in your life! You'd KILL yourself!"; ]; !A useless object object Armory "Armory" Smithy has scenery concealed with name "armor" "shield" "shields" "breastplate" "mail" "plate" "platemail" "armory", description "All the armor here looks like it would offer a lot of protection. And a lot of weight.", before[; take: "While it would be nice to be protected before venturing after the Ogre, if you wore any of this, you would not be able to venture. It's too heavy for you. Besides, you can't just TAKE this stuff, have you no morals?"; ]; !A useless object object Anvil "Anvil" Smithy has scenery concealed with name "anvil", description "It's a big, heavy, black anvil. Perfect for smushing Pesky puddy tats or persistent coyotes.", before[; take: "Yeah. Right. I'd like to see you TRY to lift that thing."; ]; !A useless object object Smithy_Tools "Tools" Smithy has scenery concealed with name "hammer" "tool" "tools", description "The blacksmith's tools. They look very adept at doing blacksmithing-toolery.", before[; take: "If you took those, then what would Tiny make all his wonderful merchandise with?"; ]; !Door barring way to trash outside, where bugle is object Smithy_Back_Door "Back Door" Smithy has openable ~open door concealed with name "back" "door" "back door", description "It's a simple door leading to a simple behind-the-shop."; !================================== Object Behind_Blacksmith_Shop "Behind the Blacksmith's Shop" has light with description "There's nothing here except a large box holding what looks like broken merchandise of the smith's. The back door to the east makes an excellent entrance back into the shop.", e_to Smithy, in_to Smithy; !A useless object, hinting to search the trash Object Trash_Box "Trash Box" Behind_Blacksmith_Shop has container static scenery with name "box" "trash box", description "It's a box. Nothing really interesting about it. What it's HOLDING however..."; !Concealing the bugle Object Broken_Merchandise "Broken Merchandise" Behind_Blacksmith_Shop has concealed with name "trash" "merchandise" "broken" "metal" "pile" "broken merchandise", description "A pile of scrap metal. Very boring indeed.", before[; examine, search: if (self hasnt empty) { give self empty; !So as to not let the player get more than one bugle move Bugle to Behind_Blacksmith_Shop; "An assortment of twisted, snapped, sheared, dented and otherwise broken blacksmith merchandise. Most of what's in the pile has been reduced to scraps of metal, all salvagable parts removed. You do notice, however, a dented but otherwise usable bugle lying under a few pieces of scrap."; } take: "You try to take the trash, but all the rather pointy, jagged edges of scrap metal persuade you otherwise."; ]; !horn used to wake up fluffykin Object Bugle "Bugle" has playable with name "horn" "trumpet" "instrument" "bugle", description "It's a little dented, but still looks like it could produce a nice, loud sound.", before[; play: if (player in Fluffykin_House) { score = score + 3; give Fluffykin_House solved; give Fluffy_Door ~locked; "You purse your lips and blow as hard as you can into the bugle, producing a loud, horrid sound that should not be allowed to exist even amongst the vilest demons of hell. You hear a startled yelp from inside Old Man Fluffykin's house, followed by a few loud bangs, before finally hearing the distinct sound of a front door being unlocked."; } else { "You blow into the horn making a rather unpleasant noise that echoes around you."; } ]; !========================================= Object South_Path "Southern Path" has light with name "path" "south path" "southern path", description "This trail extends to the north back into Town Square, to the South towards Old Man Fluffykin's house, and further on towards the neighboring town of OtherTown. Weeds line the sides of the path, shying away from the troddings of man. Deep parallel indentations in the soil indicate this is a well-traveled road. There is little in the way of trees on either side of the path, the trail cutting through a large field of tall, overgrown grass to reach its destination.", n_to Town_Square, s_to Fluffykin_House; !A useless object object Grass "Tall Grass" South_Path has scenery concealed with name "grass" "tall" "tall grass" "weeds" "weed", description "The tall grass along the sides of the southern path grows unhindered. The children often hide in it when they don't want to come home for supper.", before[; search: if (Horseshoe has concealed) { give Horseshoe ~concealed; "You find a horseshoe in the overgrown grass. Stupid litterers."; } ]; !A useless object object Horseshoe "Horseshoe" South_Path has concealed with name "shoe" "horseshoe" "horse", description "It's a rust covered horseshoe, undoubtedly from long ago, discarded along the side of the southern path by some wayward traveller.", before[; take: if (self has concealed) { "You can't see any such thing."; } ]; !======================================= Object Fluffykin_House "Old Man Fluffykin's House" has light ~solved with name "house" "old" "man" "old man" "fluffykin^s house" "fluffy^s house" "home" "fluffykin^s home" "fluffy^s home", description "For an eccentric old hermit-like man, Old Man Fluffykin (fluffy for short) sure keeps his house in good and inviting order. Well known for his expertise in mythical creatures, he lives in a quaint, small home, much nicer than that assortment of peasant-like houses back in town. A white picket fence surrounds the perimeter of a well-kept yard dotted with various vegetable gardens. The house itself lies immediately to the west off the path and is more of a log cabin, with a well kept front porch conspicuously adorned with the obligatory rocking chair. The mat lying beneath the front door reads 'No Solicitors'. To the south is OtherTown, and to the North, the south path leads into town.", n_to South_Path, in_to Inside_Fluffy_House, w_to Inside_Fluffy_House, before [; Go: if (noun == s_obj) { "You can't go to OtherTown right now, you have to save your girlfriend!"; } if (noun == in_obj or w_obj && Fluffy_Door hasnt open) { "If you have found a way to pass through closed doors, please tell let us know!"; } ]; !A useless object object Garden "Vegetable Gardens" Fluffykin_House has static concealed scenery with name "garden" "vegetable" "vegetables" "gardens", description "Old Man Fluffykin keeps his garens nice and tended to, albeit not to the extend of your neighbor and his turnip gardens."; !A useless object object Mat "Welcome Mat" Fluffykin_House has static concealed scenery with name "mat" "welcome" "welcome mat", description "This worn down welcome mat has the faint inscription of ~No Solicitors~ upon it.", before[; search,lookunder: "You lift up the mat the reveal a pretty nice porch."; ]; !A useless object object Rocking_Chair "Rocking Chair" Fluffykin_House has static concealed scenery with name "chair" "rocking" "rocking chair", description "Old Man Fluffykin's rocking chair is the finest example of how far rocking chair technology has advanced in the past few years. It can rock both forward AND backwards! (ooooh!)"; !A useless object object FHouse "Fluffykin^s House" Fluffykin_House has static scenery concealed with name "log cabin" "cabin" "house" "home" "log", description "The house is a modest looking building, in which resides the region's foremost expert on mythical and magical creatures."; !Locked door leading into fluffy's house. Knocking upon it or trying to open it will yield a clue that the occpant !is asleep at the moment, and must be awoken. Object Fluffy_Door "Fluffykin's Front Door" Fluffykin_House has openable static concealed door locked with name "door" "front door" "fluffy^s door" "fluffykin^s door", before [; examine: if (self has locked) { "The door is rather thick, but looks like it would be an excellent surface to knock upon. It's a good thing you're such an accomplished knocker! From inside you hear light snoring."; } else { "The front door looks like an old man's front door, which is to say it looks like any other ordinary front door. You have no time to be contemplating a front door!"; } open: if (self has locked) "You jiggle at the handle, verifying that it is, indeed, locked. From inside you hear light snoring."; knock: if (self has locked) { "You knock on the door and hear a few muffled mumbles before the steady snoring returns. Looks like you weren't loud enough."; } else { "'I don't want any!' yells Old Man Fluffykin from inside the home."; } ]; !A useless object object Fence "Fence" Fluffykin_House has static scenery concealed with name "fence" "picket" "white picket" "white picket fence" "white-picket" "white-picket fence" "white fence", description "It's the obligatory white-picket fence that oh-so many country homes are known to have."; !============================================= Object Inside_Fluffy_House "Inside Fluffykin's House" has light scored with description "It smells like old people in here. There are a wide assortment of books strewn across the one-room house. Embers glow in the fireplace along the western wall, and a small stove resides next to a small table perched against the north wall. There are two sofas facing the fireplace from the center of the room, and bookcases overflowing with books, candles, knick-knacks, doo-dads, thingies and other not-helpfully-descriptive words line up against the southern wall. A bed has been placed in the only portion of the room not covered with odd items of questionable nature, and you marvel at how lucky the old man was to find a clear space on the floor to put it. The door to the east leads outside.", e_to Fluffykin_House, out_to Fluffykin_House; !A useless object object Fireplace "Fireplace" Inside_Fluffy_House has static scenery concealed with description "It's a fireplace. You've seen one, you've seen them all. Unfortunately, you've never seen on before, living in thatch-roof cottages all your life. It's a peculiar object, comprised of stone in the shape of a cave opening. Within it, faint embers glow in a pile of soot and ashes. If provides a small amount of heat at the moment."; !A useless object object FBooks "Books" Inside_Fluffy_House has static scenery concealed with description "These books are WAY over your head. You can barely understand the titles of most of them!"; !A useless object object Candles "Candles" Inside_Fluffy_House has concealed with description "These are rather nice aromatic candles.", before[; burn: if (second == matches) { remove candles; "You light the candles and let them burn away into nothingness, breathing in their soothing, pleasant scent."; } else { "If you could do that, you deserve a place among top magicians."; } ]; !A useless object Object FBed "Bed" Inside_Fluffy_House has static scenery concealed enterable supporter with description "Old Man Fluffykin's bed looks rather unused. Probably because Old Man Fluffykin usually falls asleep in the couch by the fire, reading a book.", before[; search,lookunder: "You find a floor underneath the bed. AMAZING!"; ]; !Old man fluffykin, gives you the scentless vial if you ask him about ogres or your girlfriend, gives a huge clue !if you ask him about trolls on how to get past bridge Object Fluffykin "Old Man Fluffykin" Inside_Fluffy_House has animate ~solved with name "old man" "fluffy" "fluffykin" "old" "man" "geezer" "old man fluffykin", description "Old Man Fluffykin looks like an eccentric old man. No one knows why he's called Fluffykin, since whenever anyone asks, he assumes the fetal position and rocks back and forth muttering 'No more tea...'. Despite his looks, he's actually quite a wise man, who specializes in mythical beast lore.", before[; ask: switch (second) { 'ogre', 'ogres', 'girlfriend': if (self hasnt solved) { give self solved; move Vial to player; "The old man smiles delightfully. ~I knew someone would be by soon about that ogre last night. Yes, yes I know there was an ogre in town. Can't mistake that smell of theirs, not by a long shot, and it lingers long after they're gone.~ You tell Old Man Fluffykin's about your girlfiend. He frowns.^~Took your lady, eh? Huh, well that's too bad. Yer lady friend musta smelled really nice. Ogres hunt by smell, you know. Little known fact. Also hate water. Despise water. Will avoid water at all costs if possible. Anyway, I just happen to have something here...now where was it...~^Fluffykin rummages through the various knick-knacks and doo-dads on a shelf next to the fireplace.^~AH! Here you go, young man!~ He hands you a small vial. ~That there'll mask your smell, so they'll at least not be able to smell you coming from a mile away. Ogre eyesight isn't the greatest, but they'll still be able to see you if you're not careful.~^He smiles at you oddly for a moment, blinks, then says ~Nine times Nine is eighty-one!~"; } else { "~Sorry lad, already gave ya my only vial, but if ya want me to remind you about ogres, then that I can do!~ He clears his throat. ~Ogres hunt by smell, you know. Little known fact. Also hate water. Despise water. Will avoid water at all costs if possible. They're quite dumb creatures, but powerful to boot. Even a child ogre is more than capable of ripping a human in two. It is advised to never get into a tangle with one~"; } 'troll', 'trolls': "~Ah! Trolls! Yessiree Trolls. Mighty interesting creature, the troll. Did you know trolls are magically bound to the bridge they guard? Yup, can't set one foot offa their bridge, nosiree. Strong, fast creatures too. Much more so than they look! They're also not that dumb. Well, not as dumb as an ogre anyway. You can actually talk to a troll, but don't forget they ultimately want to eat us humans. We're not exactly a troll's idea of a tasty delicacy, however...nope, them trolls, they prefer rats. Absolutley love 'em. But when you're bound to a bridge, you take what you can get, I guess.~ Fluffykin pauses for a moment. ~Err...what was I talking about again?~"; default: "You open your mouth to ask Old Man Fluffykin, but promptly shut it, thinking your question sounds too stupid."; } ]; !Vial of scentless liquid needed to get past the ogre guarding the entrance to the cave Object Vial "Scentless Vial" has openable scored with name "vial" "potion" "scentless" "scentless vial" "liguid", description "It's the vial of scentless odor you got from Old Man Fluffykins. It should mask your human smell. It's currently closed.", !Timer code for player applying it to himself time_left, time_out[; give player smelly; "You don't know how you know, but you're certain that the scentless odor has just worn off."; ], before[; open: "You open the vial of scentless odor. Yup, it's all there. You close it, not wanting to drop any of the precious liquid."; puton: if (second == player) { give player ~smelly; StartTimer(Vial, 5); !Time for player. AFter 5 turns, the potion wears off "You open the vial of scentless odor and put some of the liquid on. You can't tell a difference in your body odor, since you've never really smelled yourself before, but if this works, you wonder if you could get any more for your stinky clothes..."; } else { if (second == Girlfriend) { give Girlfriend ~smelly; StartTimer(Girlfriend, 5); "You open the vial of scentless odor and apply some of the liquid to your girlfriend. Instantly the scent of her perfume disappears."; } else { "You don't see a reason to do that."; } } wear: give player ~smelly; StartTimer(Vial, 5); !Timer for player. After 5 turns, the potion wears off "You open the vial of scentless odor and put some of the liquid on. You can't tell a difference in your body odor, since you've never really smelled yourself before, but if this works, you wonder if you could get any more for your stinky clothes..."; ]; !================================== Object Pub "The Pub" has light with name "pub" "bar" "tavern", description "It's your favorite place in the world: THE PUB! You've spent many an evening here sipping away at a mug of cheap ale with your buddies, and even occasionally came here for a nice little drink with your girlfriend. The bar itself is attached to the northern wall, with all the magical happy juice beckoning at you from beyond the counter. Tables are arranged throughout the majority of the establishment, and a rinky-tinky piano is pushed up against the western wall. A tavern wench is busy wiping down the tables from the previous night's activities, and the bartender is just starting out his day washing out the various mugs. To the west is the door to the stockroom, and the eastern door leads back to town square.", e_to Town_Square, w_to Stockroom, in_to Stockroom, before [; Go: if (noun == in_obj or w_obj && Stockroom_Door hasnt open) { "If you've figured out a way to pass through closed doors, please tell us!"; } ]; !A useless object Object Mug "Mug" Pub has concealed static scenery with name "mug" "cup" "glass", description "The wooden mugs of the pub are designed to LOOK like they can hold a lot of ale, but since they're so thick, refills are needed much quicker than one would otherwise think.", before[; take: "The Tavern Wench stops you from taking the mug. ~Pub's not open yet for drinking, sugar.~"; ]; !A useless object Object Ale "Ale" Pub has concealed static scenery edible with name "liquor" "beer" "ale" "spirits" "happy juice" "drink", description "ALCOHOL! Need more be said?", before[; take, eat, drink: "Normally, you would. But you have to stay sober enough to save your girlfriend, first!"; ]; !A useless object Object Tables "Tables" Pub has concealed static scenery with name "tables", description "The grimey, dirty tables are slowly getting cleaned by the Tavern Wench."; !No matter what you say to the bartender, he'll mutter about rats and the wench, giving a clue that you should !talk to the wench about rats Object Bartender "Bartender" Pub has animate with name "bartender" "barkeep" "man", description "He's not the friendliest of people in the town, but that's ok cuz people come her for drinks from him, not conversation. Besides, the Tavern Wench more than makes up for his demeanor. And he can mix a pretty mean drink. He looks particularly sour today.", before[; ask, tell: "~Stupid rats. I HATE rats. Wench better stop stalling and get rid of those rats...~ he doesn't seem to notice you at all."; ]; !Asking the wench about rats will yield the stockroom key if the player is carrying the rat trap. Asking her about !ogres, trolls or your girlfriend will result in her telling you that old man fluffykin is an expert on ogres/trolls Object Tavern_Wench "Tavern Wench" Pub has animate ~solved with name "girl" "woman" "lady" "wench" "waitress" "tavern wench" "tavern", description "The tavern wench wears form-fitting tunic strategically cut to allow her sizable bosom to overflow just enough to be enticing. She wears a rather short skirt currently covered with a cleaning apron. You've tried to bag her (before you met your girlfriend!) just like almost every other regular here at the tavern, but to know avail. She knows how to play her sexuality just right to get the best tips without inviting too many unwanted advances.", before[; ask: if (self hasnt solved) { switch (second) { 'rats', 'rat': print "The Tavern Wench sighs and shakes her head. ~I'm not taking care of those rats for him, they're so disgusting!~ She squints her eyes at you. ~Say big boy...~, her voice drops into a sultry whisper as she glides up beside you, running a finger along your chest.^~Do you think you could do me a teensy weensy little favor and get rid of those rats for me?~^(yes / no)>"; if (YesOrNo() == true) { if (Rat_Trap in player) { move Stockroom_Key to player; give self solved; "She squeals with delight to be rid of her terrible burden.^~Oh THANK you stud! You're my hero! You know...if your girlfriend gets devoured by that ugly ogre, you can always come talk to me. I can be very....consoling.~ She winks at you seductively, handing you the key to the stockroom, then turns back to wiping down the tables. Did it just get hot in here!?"; } else { "Her eyes light up for a moment, but then looks saddened again. ~I thank you for your enthusiasm, but you don't look like you have anythign that could help at the moment...~. And with that, she turns back to cleaning the tables."; } } else { "She sighs and shrugs, causing her bosom to inflate and bounce in all the right places, pauses expectantly for a moment while watching you, then turns back to washing the tables."; } 'girlfriend', 'ogre', 'ogres': "~Yes I heard about that. Such a shame, she was always such a upbeat girl. I hear Old Man Fluffykin knows quite a bit about Ogres, if you were entertaining notions about rescuing her. If not...~ She looks you over appraisingly for a moment, licks her lips, then turns back to wiping down the tables."; 'troll', 'trolls': "She shakes her head. ~Sorry, hun, I don't know much about them. You might want to ask Old Man Fluffkin. He's supposed to be an expert on mythical, magical creatures.~ She continues to wash the tables."; default: "She glances up at you and shakes her head. ~Sorry, I've got too much to do at the moment to talk to you about that~"; } } else { "~C'mon stud! I know you can take care of those icky rats!~ As if to entice you into action, she inhales sharply, threatening to burst from her tight tunic."; } take: "Alas, you've tried that before. No one takes the Tavern Wench, it's the Tavern Wench who does the taking."; ]; !key to the stockroom, attained when agreeing to help the wench object Stockroom_Key "Key to Stockroom" Tavern_Wench has scored with name "stockroom key" "key", description "It's a key. A key to the pub stockroom. Where all the booze is stored. You vow to never use this great power for evil."; !blocks entrance to the stockroom until unlocked by stockroom key Object Stockroom_Door "Door to Stockroom" Pub has openable door locked scenery concealed lockable ~open with name "door" "stockroom door", description "Just behind this door lies a treasure-trove of booze and ale. JOY!", before[; unlock: if (Stockroom_Key in Player) { give self ~locked; "You unlock the stockroom door with the stockroom key"; } lock: if (Stockroom_Key in Player) { "Now why would you want to do that?"; } else { "You have nothing to lock the stockroom door with."; } ]; !A useless object Object Piano "Piano" Pub has playable static with name "piano", description "It's the town's only piano, and the bartender's quite proud of it. Nevermind that nobody can seem to play it well.", before[; play: "You sit down and bang on a couple of keys, producing some pretty horrendous noise. Funny, you've always sounded much better when you're drunk."; ]; !=========================== Object Stockroom "The Stockroom" has light with description "The Stockroom of the Pub is every drunkard's dream come true. There are shelves lined with all manner of liquor, and tankards of ale placed around the room. A sack of peanuts near the entrance, and a small, makeshift bed has been constructed in one of the corners out of hay and a few blankets (No doubt for the bartender's or tavern wench's personal enjoyment, when the fancy strikes them). The door back to the pub is to the east, and a small rat hole has been bored into the base of the north wall. The door you just entered from is position in the east wall.", e_to Pub, out_to Pub; !A useless object Object Liquor "Ale" Stockroom has concealed static scenery edible with name "liquor" "beer" "ale" "spirits", description "There is more alcohol back here than you've seen in your entire life! OH JOY!", before[; take, eat: "Normally, you would. But you have to stay sober enough to save your girlfriend, first!"; ]; !A useless object Object Rat_Hole "Rat Hole" Stockroom has scenery concealed static with name "hole" "rat hole" "mouse hole", description "It's a hole in the wall that rats use to come and go as they please. It's obviously been patched before, as evident of the scraps of wood strewn about near the hole, but the rats always seem to break free again."; !A useless object object SBed "Bed" Stockroom has scenery static concealed supporter enterable with name "hay" "straw" "straw bed" "hay bed" "bed", description "This makeshift bed is no doubt used when the Bartender or Tavern Wench wish to seduce someone. The ample supply of alcohol back here can only serve to further their purpose. Sneaky. Genius, but sneaky.", before[; search: "Hey! You found Hay!"; burn: "Uh. No. Waaaaay too much alcohol back here."; ]; !A useless object Object Peanuts "Peanuts" Stockroom has concealed edible with name "peanuts" "nuts" "sack of peanuts" "sack of nuts", description "The bar nuts look as salty as ever.", before[; take: move Peanuts to player; "You take a handful of peanuts."; ], after[; eat: move Peanuts to Stockroom; "You eat the peanuts. If only you had some ale to go with them."; ]; !dead rat obtained by putting the cheese on the rat trap while the trap is in the stockroom. Used in conjunction !with the poison to kill the troll. Object Dead_Rat "Dead Rat" has ~solved supporter poisonable with name "rat" "dead" "dead rat" "mouse" "dead mouse", description "The rat's neck was broken when it sprung your rat trap. Congratulations, you have a dead rat.", before[; examine: if (self has solved) { "This dead rat is covered in potent poison. Yummy."; } ThrowAt, Give: if (second == Troll) { if (self has solved) { score = score + 7; remove Troll; remove self; "^You lob the poisoned rat at the Troll, who catches it neatly and proceeds to swallow it whole in one bite. ~Thanks for treat, human, but bribes no get you nowhere on my bridge.~ The Troll resumes his bridge guarding for a moment, before suddenly bending over the edge of the bridge, regurgitating an immense quantity of puke, and falling into the water, dead from your poison."; } else { remove self; "^You lob the dead rat at the Troll, who catches it neatly and proceeds to swallow it whole in one bite. ~Thanks for treat, human, but bribes no get you nowhere on my bridge.~"; } } ]; !============================== Object Neighbors_House "Neighbor's House" has light with description "This is your neighbor's house. It's not much different from your house, except alot cleaner. There is a door to the east leading to your neighbor's turnip garden. He's got the best turnips in the town, and is mighty proud of it. He usually spends all day tending to his garden. There is a bed, a cabinet and nothing else unless you want to count the assortment of gardening supplies lying about. To the south west is the door leading back to town square.", sw_to Town_Square, out_to Town_Square, before[; Go: if (noun == e_obj) { "You don't think it'd be a good idea to walk out of your neighbor's house into your neighbor's garden while your neighbor is in said garden. You ARE intruding, after all."; } ]; !A useless object object NBed "Bed" Neighbors_House has static concealed scenery supporter enterable with name "bed" "neighbor^s bed", description "Your neighbor's bed is much nicer than yours, and littered with turnip crumbs.", before[; search, lookunder: give Turnips ~concealed; "You find some turnips."; ]; !A useless object object GTools "Gardening Tools" Neighbors_House has static concealed scenery with name "tools" "gardening tools" "gardening", description "Your neighbor has a LOT of gardening tools. Many of which looks pointy and sharp and deadly if wielded by an angry neighbor who discovered an intruder within his home.", before[; take: "Your neighbor would notice in an instant if ever one of his precious tools was missing."; ]; !A useless object object Turnips "Turnips" Neighbors_House has concealed edible with name "turnip" "turnips", description "It's an ordinary turnip, from your neighbor's garden.", before[; take: if (self has concealed) "You can't see any such thing."; eat: move Turnips to Neighbors_House; "You eat the Turnips. Wow, those actually ARE pretty damn good!"; ]; !A useless object object Neighbors_Back_Door "Neighbor's Back Door" Neighbors_House has door scenery concealed ~open with name "door" "backdoor", description "Your neighbor's back door is closed, obstructing his view of the interior of his house. You'll want to keep it that way.", before[; open: "And what, let your neighbor see that you broke into his house?! You're a mad man! A MAD MAN!"; knock: "You start to knock, then realize that advertising your presense within your neighbor's house to your neighbor would be a bad idea."; ]; !cabinets holding the flask of poison you need to poison the rat to kill the troll. Object NCabinets "Cabinets" Neighbors_House has static concealed openable pluralname container with name "cabinets" "cabinet" "cupboard" "cupboards" "cuboards" "cuboard", description "There cabinets are MUCH better than your cabinets. But you don't care. You're proud of your cabinets.", before[; open: if (self hasnt empty) { give self open; move Poison to Neighbors_House; give self empty; "You open the cabinets, seeing all sorts of non-descript food. A flask of poison falls out of the cabinet and this the floor, thankfully not shattering."; } else { "You open the cabinets to see all sorts of non-descript food. There's no more poison left for you, though."; } ], after[; examine: if (self hasnt open) { "The cabinets are closed."; } else { "The cabinets are open."; } ]; !Poison needed to poison the rat and kill the troll. object Poison "Flask of Poison" has openable scored ~solved with name "flask" "poison", description "It's a flask of green poison. It looks very potent. You idly wonder what your neighbor was doing with it, then decide it's better not to know.", before[; eat: "...We let you do some stupid things around here, but we're NOT going to let you poison yourself."; puton: if (second has poisonable) { give second solved; if (second == Dead_Rat) { give self solved; score = score + 2; } "You sprinkle some of the poison over ", (the) second, "."; } ]; !================================ object Girlfriends_House "Your Girlfriend's House" has light empty with description [; print "This is your girlfriend's house. To the north west is the exit back to town square. There is a dresser in the south-east corner, a bed poisitoned against the southern wall, a stove against the northern with shelves above it holding some food, and an armoir pushed up against the east wall."; if (Rug hasnt solved) { " There is a shaggy rug in the center of the room."; } else { " There is a shaggy rug moved slightly off to the side of the room, revealing a trap door."; } ], before[; go: if (noun == d_obj) { !can't go down until rug is moved if (rug hasnt solved) { "You can't go that way."; } if (Trap_Door hasnt open) { "If you've figured out a way to move through closed doors, we'd like to know!"; } } ], nw_to Town_Square, out_to Town_Square, d_to Girlfriends_Basement; !A useless object object GBed "Bed" Girlfriends_House has static concealed scenery supporter enterable with name "bed" "girlfriend^s bed", description "Your girlfriend's bed is very, very comfortable. You've spent many a night within that bed, not necessarily sleeping.", before[; search,lookunder: "You find nothing under her bed. Your girlfriend has always been neat and tidy."; ]; !A useless object object Dresser "Dresser" Girlfriends_House has openable concealed static scenery container ~open with name "dresser", description "Your girlfriend's dresser is quite large, and you always marvel at the amount of clothes she has stuffed away within that thing.", before[; open: give Dresser open; "You pull open on of the dresser drawers to reveal some of your girlfriend's underwear."; ]; !A useless object object Underwear "Unmentionables" Dresser has clothing with name "underwear" "lingerie" "unmentionables", description "This frilly pink matching bra-and-panties set is just the thing your girlfriend would put on, and just the thing you enjoy taking off.", after[; wear: "...pervert."; ]; !A useless object object GStove "Stove" Girlfriends_House has scenery static concealed with name "stove", description "This stove looks exactly like yours. Only cleaner. And more domesticated."; !A useless object object Armoir "Armoir" Girlfriends_House has openable concealed static scenery container ~open with name "armoir" "closet", description "This make-shift closet stores the various dresses, coats and other larger articles of clothing that your girlfriend couldn't fit within her dresser", before[; open: give Armoir open; "Opening the armoir reveals nothing but dresses. Strange, there used to be a coat in here too..."; ]; !A useless object object Dress "Dress" Armoir has clothing with name "dress" "dresses", description "It's a rather elegant dress, and you wonder for a moment why you've never seen your girlfriend in it.", before[; take: move Dress to player; "You remove a dress from the armoir."; ], after[; wear: "You feel pretty."; ]; !A useless object object Shelves "Shelves" Girlfriends_House has static concealed scenery with name "shelf" "shelves", description "You built these shelves for your girlfriend yourself, and are always slightly amazed at the fact that they haven't come crashing to the ground yet."; !A useless object object GFood "Food" Girlfriends_House has static concealed scenery with name "food", description "There actually isn't the much food here, since today normally would have been shopping day for your girlfriend. And what is here, you don't like.", before[; take: "You don't like any of the food on the shelf."; ]; !perfume used to spray down the doll, making it smell like your girlfriend so you can switch it with her object Perfume "Perfume" Girlfriends_House has openable with name "perfume", description "It's a bottle of your girlfriend's favorite perfume. She always wears it, so this reminds you of your girlfriend immensly.", before[; puton: if (second == Doll) { score = score + 3; give Doll solved; if (Doll in Cage || Doll in Ogre_Abode) { give Cage solved; } "You spray the doll down with your girlfriend's perfume. Now it smells just like your girlfriend."; } ]; !rug concealing a trap door. object Rug "Rug" Girlfriends_House has concealed static supporter ~solved enterable ~empty with name "rug" "carpet", description "It's a rather nice rug, no doubt some kind of gift. You've fooled around with your girlfriend a few times on it.", before[; push,pull: if (player in self) { "You can't do that while you're standing on it!"; } else { if (self hasnt solved) { if (Self hasnt empty) { give self empty; score = score + 1; } give self solved; give Trap_Door ~concealed; "You move the rug off to the side of the room, revealing a trap door."; } else { give self ~solved; give Trap_Door concealed; "You move the rug back to the center of the room, covering up the trap door."; } } lookunder: if (player in self) { "You can't do that while you're standing on it!"; } else { if (self hasnt solved) { "You lift up the corner of the rug and take a peek underneath. There's a trap door there!"; } else { "You lift up the corner of the rug and take a peek underneath. Yup, that's some mighty fine under-the-rug there."; } } ]; !trap door to girlfriend's basement, which has the gun powder needed to blow up the bridge !can't find trap door unless rug is moved object Trap_Door "Trap Door" Girlfriends_House has concealed static door ~open openable with name "door" "trap" "trap door" "secret door" "secret", description "It's the trap door you forgot about that leads to your girlfriend's basement.", before[; examine: if (rug hasnt solved) { "You can't see any such thing."; } open: if (Trap_Door has concealed) { "You can't see any such thing."; } if (rug hasnt solved) { "You can't open that without moving the rug!"; } ]; !================================= object Girlfriends_Basement "Your Girlfriend's Basement" has ~light with description "This is your girlfriend's basement. She's never seen a need to do anything with it but store old things she doesn't really want to throw away. Mostly there's just old scraps of paper, books and childhood toys, but she's been known to have other odd things that you wouldn't expect a dainty, pretty girlfriend such as herself to have.", u_to Girlfriends_House; !gun powder needed to blow up the bridge and protect the village from the ogre object Gun_Powder "Gun Powder" Girlfriends_Basement has explosive scored with name "powder" "gun powder" "black powder" "gun", description "You have no idea why your girlfriend has a barrel of gunpowder in her basement. Or why there's a wick sticking out of it.", before[; burn: if (second == Matches) { if (Gun_Powder in Bridge) { if (player in Bridge) { "You want to blow that the bridge while you're STANDING on it?!"; } else { remove Bridge; print "You light the wick on the gunpowder and retreat a safe distance. In moments, the flame hits the black powder and a powerful explosion rocks the bridge, shattering it into a bajillion pieces, effectively removing the only safe passage across the river.^"; if (Girlfriend notin Girlfriends_House) { deadflag = 3; print "^Without any means of crossing the river, you have no hope of reaching your girlfriend before the Ogre devours her. Way to go, genius.^"; } else { score = score + 10; deadflag = 2; print "^The Ogre appears on the other side of the river, bellowing furiously at its lost delicacy. It eyes the rushing torrent of water fearfully, roars in frustration, and throws a terrible tantrum before stomping angrily back to its cave. Congratulations! You've manage to not only save your girlfriend, but also protect the town from the fury of the Ogre!"; } rtrue; } } else { if (Gun_Powder in player) { "Blowing up the Gun Powder while holding it would NOT be your brightest idea."; } else { if (Gun_Powder in River) { "Blowing up the Gun Powder on the river bank probably won't accomplish much. That bridge looks pretty rickety, however..."; } else { "I wouldn't recommend doing that here."; } } } } else { "And how do you propose to do that?"; } ]; !A useless object object Toys "Childhood Toys" Girlfriends_Basement has scenery static with name "toys" "childhood" "childhood toys", description "There's an assortment or childhood toys, including dolls and balls and marbles and games and all that good stuff. None of it looks interesting.", before[; take: "You don't see a point in taking any of this junk."; ]; !A useless object object Books "Books" Girlfriends_Basement has scenery static with name "book" "books" "paper" "papers", description "Lots of papers and books lie around the basement in neat and orderly fashion.", before[; take: "You don't see a point in taking any of this stuff."; ]; !=================================== object General_Store "General Store" has light with description "The general store has a lot of general stuff. It's got general books, general foods, general toys, and other general generalities. About the only thing that stands out is single, not-very-general lamp. The door to the north east would lead you back to town square.", ne_to Town_Square, out_to Town_Square; !A useless object object GBooks "General Books" General_Store has scenery static with name "books" "book", description "These books are very general. You couldn't learn anything specific like ogres or trolls from them.", before[; take, buy: "You aren't interested in that."; ]; !A useless object object GFoods "General Foods" General_Store has scenery static with name "food" "foods", description "These foods are very general. Nothing looks very tasty. Not exactly bad, but not good either.", before[; take, buy: "You aren't interested in that."; ]; !A useless object object GToys "General Toys" General_Store has scenery static with name "toy" "toys", description "These toys are very general. They don't look very exciting, but at least mildly exciting.", before[; take, buy: "You aren't interested in that."; ]; !the obligatory adventuring lamp, provides light to areas shrouded in darkness object Lamp "Lamp" General_Store has concealed scored with name "lamp" "lantern", description [; print "It's a typical adventuring lamp, complete with self-lighting wick and renewable oil."; if (Lamp has light) { " It is currently on.";} else { " It is currently off."; } ], before[; take: if (Lamp has concealed) { "You have to buy that. You're not a thief!"; } buy: print "The clerk appears out of nowhere. ~That's a very fine piece of merchandise you know! State of the art! Self-lighting, unlimited supply of oil, the WORKS! And it's your lucky day...see this particular model isn't general enough for me...so i'll let you have it for the low, low price of $3.25!~ he glances you up and down. ~So, you want it?~^(yes / no)>"; if (YesOrNo() == true) { if (Money in player) { move Lamp to player; give Lamp ~concealed; remove Money; "The clerk's eyes light up. ~You won't be disappointed, sir!~ He hands you the lamp and scurries away with the money"; } else { "The clerk holds out his hand, expecting payment, waits for a moment, then realizes you don't have any money, and retreats to his back room."; } } else { "~No? Oh well then.~ The clerk shrugs and retreats to wherever he came from."; } switchon, burn: give Lamp light; print "You turn on the lamp.^"; if (player in Cave && Cave hasnt solved) { give Cave solved; "The light from your lamp lights up this portion of the cave, allowing you to see the various stones, stalagtites and other cavely-scenery. There are small piles of rocks strewn about the cavern floor. The cave continues to the north."; } rtrue; switchoff: give Lamp ~light; "You turn off the lamp."; ]; !================================== object North_Path "North Path" has light, with description "The north path leads out of town and into the forest. There are a couple trees dotting the sides of the path, the nearest to the path known to be the favorite climbing tree of the town children.", n_to Forest, s_to Town_Square, u_to In_Tree, before[; Go: if (noun == u_obj) { if (Lamp in player || Gun_Powder in player || Bugle in player || Vial in player || Poison in player || Doll in player || Perfume in player || Dead_Rat in player || Cheese in player) { "You can't climb the tree weighing this much! You're not even sure it could hold YOUR weight, much less you and all this stuff!^"; } } ]; !Tree holding the matches needed to light the gunpowder. You can't ascend the tree if you have certain objects !in your possesion object Tree "Climbing Tree" North_Path has scenery static concealed, with name "tree" "climbing" "climbing tree", description "It's an old oak tree that looks slightly worn from frequent visits of children amongst its branches. It looks quite climbable, although its ability to hold someone of your weight is questionable.", before[; climb: if (Lamp in player || Gun_Powder in player || Vial in player || Poison in player || Dead_Rat in player || Cheese in player || Bugle in player || Doll in player || Perfume in player) { print "You don't even know if the tree could hold YOUR weight, much less you and all the stuff you're holding!^"; } else { PlayerTo(In_Tree); } rtrue; ]; !================================= object In_Tree "In The Tree" has light ~empty, with description "The branches creak tenaciously as you balance your weight deftly, defying gravity with the utmost of acrobatic skill. There is a bird's nest perched on one of the branches.", d_to North_Path; !matches needed to light the gunpowder object Matches "Matches" In_Tree has concealed scored with name "matches", description "These are matches that the children were probably playing with while climbing the tree. It's only by a miracle that the obvious disaster was avoided.", before[; take: if (self has concealed) "You don't see any such thing."; ]; !nest concealing the matches object Nest "Nest" In_Tree has scenery static with name "nest" "bird^s nest", description "A haphazard collection of twigs and leaves, it's always been a marvel to you how birds manage to get all this stuff to stick together.", before[; search, examine: if (Matches has concealed) { give Matches ~concealed; if (In_Tree hasnt empty) "You see some matches sitting in the bottom of the nest."; } take: "You don't wish to disturb some innocent bird's home."; ]; !================================= object Forest "The Forest" has light, with description "The forest has always been a source of mysterious tales with which the town likes to entertain themselves with. Rarely does anyone but the village hunter come this far, for fear of the ogres inhabiting the deeper recesses of the forest. Trees extend in all directions but the south, dead leaves cover the forest floor, and bird chirps echo through the area. The path to the south leads towards the town, and continues to the north deeper into the forest.", s_to North_Path, n_to Deep_Forest; !A useless object object Sticks "Bundle of Sticks" Forest with name "sticks" "bundle" "stick bundle" "twigs" "wood", description "It's a bundle of dry sticks, probably dropped by a townsman searching for kindling.", before[; burn: if (second == Matches) { remove Sticks; "The sticks catch fire easily, and are quickly consumed by the flame."; } ]; !================================= object Deep_Forest "The Deep Forest" has light, with description "The light has trouble penetrating the dense canopy of the trees this deep in the forest. The path fades away shortly to the north, indicating the lack of travel through this portion of the forest. To the west, the grass has been stomped down and the trees have broken branches in a definate ad-hoc path. You're accute powers of deduction lead you to believe the ogre went that way.", s_to Forest, w_to River; !doll needed to replace the girlfriend with, after it's sprayed down with her perfume object Doll "Child's Doll" Deep_Forest has ~solved empty with name "doll" "child^s doll" "child^s", description[; print "This child's toy is actually rather large. From a distance, it could probably pass for a small child itself."; if (self hasnt solved) { print " It smells rather horrible at the moment, probably due to its days spent in the forest.^"; } else { print " It smells just like your girlfriend when she's wearing her perfume (which is all the time).^"; } ], before[; take: if (Girlfriend has solved) { !don't let you take the doll after you've already saved your girlfriend "If you took the doll now, the ogre would sure notice the scent of your girlfriend is missing!"; } give Cage ~solved; ], after[; drop, insert: if ((self in Cage || self in Ogre_Abode) && self has solved) { if (self has empty) { !trip flag so we only award points once give self ~empty; score = score + 4; } give Cage solved; } ]; !================================= !you can't advance past this area until you kill the troll. object River "The River" has light with description "You've come to a rather sizable and none-too-friendly-looking river spanned by a shoddily built wooden bridge. Across the bridge, further west into the forest, you can see what appears to be a cave opening into a large rock formation. The water rushes by quickly and loudly under the bridge. Retreating back to the east will bring you back to where the conventional path ended.", e_to Deep_Forest, w_to Cave_Opening, before[; Go: if (noun == W_obj) { if (Bridge notin River) { "There's no way you could cross this raging river without a bridge! If only you hadn't blown it up..."; } if (Troll in River) { if (Troll has concealed) { give Troll ~concealed; "As you approach the bridge, a piercing howl causes you to jump back instinctively, and a green blur appears from underneath the bridge and comes to a quick halt at the edge of the bridge, facing you. ~YOU NO CROSS MY BRIDGE, HUMAN!~ the Troll yells. Then, pausing for a moment, it licks its lips and says, ~Unless, of course, you pay toll.~ You have no idea what the toll is."; } else { "The Troll blocks your way. There's no way you could get past this speedy creature while it guards its bridge."; } } } ]; !bridge that the troll guards, and also needs to be blown up afteryou have your girlfriend to safety to complete the game Object Bridge "Bridge" River has supporter concealed static enterable with name "bridge" "wood", description "This wooden bridge hardly looks like it could support your own weight, much less a full-grown ogre's. Nevertheless, you're fairly certain the ogre came this way with your girlfriend, so the bridge must be alot sturdier than it looks. Still, it looks like a good jolt could easily break it apart...", before[; GoIn, Enter: if (Troll in River) { if (Troll has concealed) { give Troll ~concealed; "^As you approach the bridge, a piercing howl causes you to jump back instinctively, and a green blur appears from underneath the bridge and comes to a quick halt at the edge of the bridge, facing you. ~YOU NO CROSS MY BRIDGE, HUMAN!~ the Troll yells. Then, pausing for a moment, it licks its lips and says, ~Unless, of course, you pay toll.~ You have no idea what the toll is."; } else { "The Troll blocks your way. There's no way you could get past this speedy creature while it guards its bridge."; } } else { PlayerTo(Cave_Opening); rtrue; } ]; !Troll guarding the bridge, probably toughest or second toughest puzzle in game. Must kill him to advance object Troll "Troll" River has animate concealed with name "troll" "the troll", description "The lesser-known cousin of the Ogre has a penchant for guarding bridges, and as such, they are rarely seen away from their claimed bridge. They usually demand outrageous prices for passage over their bridge. This particular troll looks rather nasty, it's green, leathery skin hiding the supernatural strength that the small frame would otherwise suggest. He watches you with beady yellow eyes and slight grin, cackling softly to himself at the quarry he's found.", before[; attack: deadflag = 1; "You attack the troll in an all out fury, intent on drawing blood to reach your girlfriend. And he easily bashes you over the head with fists of steal, neatly rips apart your body, and dines gloriously on idiot-meat for the next few days."; tell: "The troll doesn't care about what you have to talk about. He just wants your payment, or for you to foolishly attempt to cross the bridge without paying."; ask: switch (second) { 'troll', 'trolls': "He cackles with delight. ~Yup, dat's me. Now you gonna pays or nots?~"; 'bridge': "The Troll glances at the bridge. ~Ol' Betsy's her name. MY bridge, human! You no cross unless you pay. It cost you an arm and a leg to cross. Give me arm and leg, and you get cross bridge.~ He stands guarding his precious bridge expectantly."; 'ogre', 'ogres': "~I let Ogre cross bridge.~ As the Troll talks, he points to the cave on the other side of the river. ~Ogre no like water, and strike deal. I let ogre cross freely, ogre give me leftover from hunts. Is good deal, I rarely hungry now. But...~ he eyes you appraisingly. ~I still like to catch me own meats.~"; 'girlfriend': "The Troll licks his lips enthusiastically. ~Me no can wait to get taste of that luscious morsel. She scream good. Flesh must taste good too.~"; 'toll', 'price': "The Troll nods. ~It cost you an arm and a leg to cross MY bridge, human.~ You can't afford that!"; default: "The Troll cocks his head sideways, shrugs, and doesn't respond."; } ]; !================================= object Cave_Opening "Cave Opening" has light with description "The opening to the cave lies to the north and looks easily large enough for an adult ogre to fit through, so you're fairly certain this is the way that ogre had to have come with your girlfriend. That, and there's a small, child ogre sleeping just inside the entrance to the cave. Back to the east lies the river.", e_to River, in_to Cave, n_to Cave, before[; Go: if (noun == in_to or n_to) { if (player has smelly) { !you can't enter the cave unless you don't smell "As you approach the entrance to the cave, the child ogre wakes suddenly and sniffs the air. You jump behind a nearby bush for cover as the child ogre scrambles to his feet. It looks around expectantly. ~Human smell.~ It mutters. After a few moments of seeing nothing, it takes one last whiff of the air and settles back down against the cave wall, eventually drifing back to sleep."; } else { print "You manage to tip-toe your way past the slumbering ogre-child, deftly avoiding detection with your superb powers of odorlessness.^"; } } if (noun == e_to) { !If you've rescued your girlfriend and she's not run back to her house yet... if (Girlfriend has solved && Girlfriends_House has empty) { print "You pull your girlfriend across the bridge...^^"; print "Your girlfriend turns to you, throws her arms around you and gives you a huge kiss. ~I'm going back to my house! This is all to much for me...you have to find a way to keep that Ogre away once and for all!~ And with that, she runs off towards the town.^"; move Girlfriend to Girlfriends_House; give Girlfriends_House ~empty; } } ]; !Ogre guarding the entrance to the cave object Child_Ogre "Child Ogre" Cave_Opening has animate with name "ogre" "child" "child ogre" "small ogre" "little ogre", description "The smaller version of this hideous creature, this particular ogre has yet to come into its full-blown strength and ugliness. That's not to say, however, that it wouldn't have any problem grinding your bones up to make its bread. It slumbers peacefully against the side of the cave, playing that classic role of a sleeping guard perfectly.", before[; attack: deadflag = 1; "You charge the ogre who immediately wakes up and crushes your head between it's lumbering fists effortlessly. Way to go, hero."; tell, ask: "Ogres are not world-renowned for their conversation skills. Better just to not even try."; ]; !=================================== Object Cave "Cave" has light ~solved scored with description[; !player must have lamp on him and on to see the rocks concealing the cage key if (Lamp notin player || Lamp hasnt light) { "The front portion of the cave is barely lit enough from the light shining in from the entrance. You can make out the shapes in the advancing darkness just enough to avoid crashing into an ill-placed rock or stalagtite. The darkness of the cave extend deeper into the cave, northernwise."; } else { if (self hasnt visited) { give Cave solved; } !If the player enters the cave with the lamp on, !automatically solve this puzzle. "The light from your lamp lights up this portion of the cave, allowing you to see the various stones, stalagtites and other cavely-scenery. There are small piles of rocks strewn about the cavern floor. The cave continues to the north."; } ], s_to Cave_Opening, out_to Cave_Opening, in_to Ogre_Abode, n_to Ogre_Abode, before[; Go: if (noun == out_to or s_to) { !if player resuced girlfriend, cannot exit unless both don't smell if (player has smelly || (Girlfriend has smelly && Girlfriend has solved && Girlfriends_House has empty && Girlfriend notin Cave_Opening)) { if (Girlfriend has solved && Girlfriend notin Cave_Opening && Girlfriends_House has empty) { print "You try to pull your girlfriend out of the cave...^"; } "As you approach the entrance to the cave, the child ogre wakes suddenly and sniffs the air. You jump behind a rock for cover as the child ogre scrambles to his feet. It looks around expectantly. ~Human smell.~ It mutters. After a few moments of seeing nothing, it takes one last whiff of the air and settles back down against the cave wall, eventually drifing back to sleep."; } else { !your girlfriend automatically comes with you if (Girlfriend has solved && Girlfriends_House has empty && Girlfriend notin Cave_Opening) { move Girlfriend to Cave_Opening; score = score + 3; print "You pull your girlfriend out of the cave...^^"; } print "You manage to tip-toe your way past the slumbering ogre-child, deftly avoiding detection with your superb powers of odorlessness.^"; PlayerTo(Cave_Opening); rtrue; } } if (noun == n_to or in_to) { if (Lamp notin player || Lamp hasnt light) { "The foreboding darkness keeps you from advancing any further. No WAY you'd wan't to stumble around in the dark of an Ogre's cave!"; } } ]; !Pile of rocks concealing cage key object Rock_Pile "Rock Pile" Cave has scenery static concealed with name "rocks" "rock" "pile" "pile of rocks" "rock pile", description "It's a pile of rocks. They're arranged almost like a child would arrange building blocks.", before[; examine, search: if (Cave hasnt solved) { "You see no such thing."; } else { if (Prison_Key has concealed) { give Prison_Key ~concealed; "Looking through the piles of rocks, you find a rusty, crudely made key."; } } ]; !key to girlfriend's cage object Prison_Key "Rusty Key" Cave has concealed scored with name "key" "rusty" "rusty key" "crude key" "crude" "prison key", description "This rusting key has a 3 teeth on one side and a wide ring on the other. It looks so old, you venture a guess that the rust might actually be holding it together."; !======================== object Ogre_Abode "Ogre's Abode" has ~light with description[; if (Ogre_Abode hasnt visited) { "There are bones littering the floor of this dank cavernous dead-end. A repulsive smell invades your nostrils, and following it, you spy a much, MUCH larger version of the ogre you saw at the cavern entrance slumbering upon a large pile of bones. Next to the ogre's massive frame is a rusty, iron cage, the contents of which you immediately recognize as your girlfriend! She blinks hastily against the sudden intrusion of light upon the room, then opens her eyes wide when she sees the source of such invasion. She keeps quiet, not wanting to wake the ogre, but looks eager to be rid of the company of the smelly beast."; } else { print "There are bones littering the floor of this dank, cavernous dead-end. The ogre continues to snore away, blissfully unaware of the intrusion upon its lair."; if (Girlfriend in Cage || Girlfriend in Ogre_Abode) print " Your girlfriend waits expectantly for her rescue."; print "^"; } ], s_to Cave, out_to Cave, before[; Go: if (noun == s_to or out_to) { if (Girlfriend has solved && Girlfriends_House has empty) { move Girlfriend to Cave; print "You pull your girlfriend south...^^"; PlayerTo(Cave); if (Girlfriend hasnt empty) { give Girlfriend empty; StartTimer(Ogre, 40); !You have 40 turns once you leave the ogre abode with your girlfriend !to blow up the bridge or you lose !hint that the game isn't over yet, you must protect the town from the ogre. "Your Girlfriend urgently whispers to you as you exit the Ogre's Abode.^~That's not going to fool the ogre for very long...it's going to wake up soon and when it notices I'm missing, it'll probably come right back into the village and kill me right there! We need to somehow make sure that the ogre can't get back into town!~"; } rtrue; } } ]; !A useless object object Bones "Bones" Ogre_Abode has scenery static concealed with name "bone" "bones" "bed" "pile of bones" "bone pile", description "The many, many bones strewn across the lair suggest that ogres do not, in fact, grind bones for bread making. It's still a rather intimidating sight, though."; !The infamous ogre. He doesn't do anything, really. object Ogre "Ogre" Ogre_Abode has animate with name "ogre" "monster", description "This ogre looks like a one-creature wrecking machine. It's massive body looks like it could crush you in an instant, and its jagged-teeth-filled mouth indicates that it would have no problem chewing you up. Currently, it's sleeping upon a bed of bones, thankfully not aware of your presence in its home.", time_left, time_out[; !The timer countdown to game over once you rescue your girlfriend move Ogre to parent(player); deadflag = 1; "^The Ogre comes rampaging out of nowhere, bellowing an inhuman scream of rage and fury. In one fluid motion, it rips your head off your body and crunches it in between its jaws. Well...maybe your girlfriend will manage to get away to safety..."; ], before[; throwat, ask, tell: "You're about to, but your girlfriend shakes her head frantically, not wanting you to wake the ogre and get yourself killed. I suggest you listen to her advice."; attack: deadflag = 1; "You swing your fist at the ogre, then scream in pain as you connect with what feels like pure steel. The ogre autonomously scratches at the place you just hit, then rolls over. Unfortunately, he rolls over on you, crushing you instantly."; ]; !The cage holding your girlfriend. You can put the perfumed doll in here to solve the switcheroo puzzle object Cage "Cage" Ogre_Abode has locked lockable concealed container enterable openable transparent ~solved static with name "cage" "prison" "iron" "bars" "cell" "door" "cage door" "prison door" "cell door", description "This rusty old cage looks like it could fall apart at any moment, but doesn't. It makes an excellent holding cell of prey for the ogre. The inside has water and some bread, for reasons you can't fathom, or even care about at the moment.", before[; unlock: if (second == Prison_Key) { give Cage ~locked; "You unlock the cage door with the prison key."; } open: if (Cage has locked) { "It appears to be locked."; } else { give Cage open; "You open the Cage door."; } ], after[; enter: if (Cage has solved || Girlfriend in Cage) { "The strong odor of your girlfriend's perfume is almost enough to block out the repulsive odor of the Ogre."; } ]; !Your girlfriend. She provides some hints on what to do to rescue her, then subtle hints on how to complete the game object Girlfriend "Girlfriend" Cage has animate ~solved smelly ~empty with name "girl" "friend" "girlfriend" "woman" "lady", description "Your girlfriend is as radiant as ever, despite her recent predicament. She looks frazzled, which is to be expected considering what's happened to her. She's wearing a nightie, evidence that she was kidnapped in the dead of night. You feel love for her swell up in your heart, and would desire to have her right here, if not for the current situation.", time_left, time_out[; !timer for applying the scentless liquid to your girlfriend give Girlfriend smelly; if (Girlfriends_House has empty) { "The scent of your girlfriend's perfume enters your nostrils as the scentless odor wears off."; } ], before[; take, push, pull: if (Cage hasnt solved) { "You reach for your girlfriend's arm, intent to pull her out of the cage, but she pulls back. She hands shows you message she had formed from bread crumbs on the ground, reading ^^'Ogre notice smell missing'^"; } else { give Girlfriend solved; "You grab your girlfriend's arm and pull her with you."; } tell, ask, askto: if (player in Ogre_Abode || player in Cage) { "You open your mouth to speak and your girlfriend gets an alarmed look on her face, frantically shaking her head no and pointing at the slumbering ogre."; } else { if (Girlfriend notin Girlfriends_House) { "Your girlfriend looks are you frantically. ~This isn't the time! We have to find safety!~"; } else { "Your girlfriend looks are you with a troubled look. ~We can't talk about that now...it's only a matter of time until that Ogre wakes up and storms the town!~"; } } ];