! ########################################################################################################## ! Augmented Fourth Brian Uri!, brian@urizone.net ! Release 3 Inform 6.21 / 6/10 Libraries ! ! ### Copyright #### ! ! The Augmented Fourth story file (Aug4.z8) and source code (Aug4.inf, Misc.inf, Places.inf, Things.inf) ! are copyright ©2000 - 2013 by Brian Uri!. They may be freely distributed; however, they are NOT Public ! Domain. Consider this game commentware: if you would like to reimburse me, please send any and all ! constructive criticism or comments about the game to the above e-mail address. ! ! See Aug4.inf for a note from the author and the changes log. ! ! ### Things.inf File Contents ### ! ! The Trumpet and Sheet Music ! Inventory Objects ! Reading Materials ! NPCs ! ########################################################################################################## ! ########################################################################################################## ! The Trumpet ! countSongs(): Returns the number of songs currently known by the player ! darkPlay(): Trumpet routines for OfficeDark ! endPlay(key): The menu for standard songs used in the Endgame ! endPlayNew(key): The menu for medley songs in the Endgame ! listSongs(): Prints out the names for the playing menu ! oneSong(song): Trumpet routines when the player only knows one song ! playEnd(key): Parses the selection of standard music in the Endgame ! playEndNew(key): Parses the selection of medley music in the Endgame ! playPick(song): Plays a specifically chosen song ! playSong(key): Parses the selection of music during the game ! Sheet Music ! ColourMusic ! HeavyMusic ! JigMusic ! LiteralMusic ! LoveMusic ! ModulateMusic ! RainMusic ! ! ########################################################################################################## Array SongBag --> 1 0 0 0 0 0 0 0; ! Duck, Rain, Heavy, Jig, Love, Colour, Literal, Modulate ! EndSongs: HeavyDuck, ColourRain, HeavyLove, ModulateJig InvObj trumpet "trumpet" with name "trumpet" "cornet" "horn" "bugle" "tpt" "bell" "valve" "valves" "lines" "silver" "capped" "gold" "plate" "pearl" "inlay" "finger" "button" "patterns", initial [; if (trumpet in PitBottom) "Your trumpet rests atop the mud."; "Your trumpet sits on the ground here."; ], description [; print "The trumpet is a beautiful silver affair that was specially-made for you in Lower Suburban Papoosen. Each valve is capped with gold-plate and has a pearl inlay for a finger button. The bell is engraved with spidery lines which weave around it in symmetric patterns."; if (self has flag && self.countSongs() < 8) " The bell of the trumpet is glowing with magic."; ""; ], before [key x; Attack, Burn, Cut, Give, ThrowAt: "What? This trumpet is a family heirloom that's been around for many...well, one generation! It'd probably be best to hold on to it and keep it in good condition."; Blow, Play: if (self notin player) "You aren't holding the trumpet."; if (player in UpperBalcony) "Better not, you might give away the element of surprise."; if (player in OfficeDark) return (self.darkPlay()); if (self has flag) { if (self.countSongs() == 1) return (self.oneSong()); print (string) random("You ready the trumpet. ", "You bring up your trumpet. ", "You raise the trumpet to your lips. "); print "What would you like to play?^"; self.listSongs(); x = false; while (x == false) { @read_char 1 0 0 key; if (key ~= 0) x = self.playSong(key); } rtrue; } if (player in PitBottom && pitGuards in PitBottom) "You play ~Ode to a Duck~ on the trumpet. Up above, Jim cackles. ~No wonder the King ordered you to be tossed in the pit! That's got to be the worst playing we've ever heard, right, Rob?~^^~Indeed...~"; "You play a foul rendition of ~Ode to a Duck~. Hmmm, perhaps the King was right."; Buy: "After several years of low-interest mortgages and buying plans, you already own the trumpet."; Close: "You can't seem to close the trumpet."; Drop: if (player in OfficeDark) "Dropping your trumpet in the dark would probably not be a good idea. Some luckless soul who follows you might trip over it and fall down a very painful rocky incline."; if (player in PBPuddle) "Your trumpet's been through enough. There's no need to drop it in the mud puddle."; else rfalse; Eat, Taste: "There's probably a better way to get a taste of music."; Empty: "You empty the condensation from your trumpet."; Fill: "A good musician usually tries to keep stuff from clogging his slides."; Insert: if (second == SQHole or QETrapdoor) "That would not be a good idea."; Open: "You peek in all of the slides but find nothing interesting."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Rub: "You shine your trumpet diligently."; Search: "A cursory search of the trumpet finds nothing unexpected."; Smell: "The trumpet has a pleasing scent of polish tinged with oil."; Squeeze: "You don't want to crush the tubing!"; Swing: "Actually, it is."; Touch: "You run a finger along the leadpipe of the trumpet."; Tune: "You carefully tune the trumpet to a concert B flat."; Wave: "You gently wave the trumpet over your head."; Wear: "You'd been meaning to buy a shoulder strap for your trumpet, but never got around to it."; ], countSongs [count; count = (SongBag --> 0 + SongBag --> 1 + SongBag --> 2 + SongBag --> 3 + SongBag --> 4 + SongBag --> 5 + SongBag --> 6 + SongBag --> 7); return (count); ], darkPlay [; give OfficeDark flag; print "You take a deep breath and sound a steady pitch on your trumpet. "; switch (OfficeDark.count) { 0: print "The bright sound of the trumpet rings through the darkness, rebounding off walls and escaping your close confines to the northeast."; if (OfficeDark hasnt general) { score = score + 2; give OfficeDark general; "^^[You have earned two points for a Seeing-Ear Trumpet.] "; } OfficeDark.timer = 0; ""; 1: OfficeDark.timer = 0; "The bright sound of the trumpet rings through the darkness, and fades towards the southwest and east."; 2: OfficeDark.timer = 0; print "^^~Who is causing that horribly obscene racket?~ There is a scintillant sparkle of luminescence and the room is bathed in light from a newly-opened entrance in the east wall...^"; move Leonine to ConstructOffice; PlayerTo(ConstructOffice); rtrue; } ], endPlay [key x; print "You raise your trumpet to your lips, realizing that this may be the most difficult performance of your life.^"; self.listSongs(); x = false; while (x == false) { @read_char 1 0 0 key; if (key ~= 0) x = self.playEnd(key); } return (x); ], endPlayNew [key x; print "What would you like to play?^"; print " (O) Ode to a Heavy Duck^ (D) Dab of Colourful Rain^ (H) Heavy Love^ (J) Lively Jig of Modulation^ (X) None^"; x = false; while (x == false) { @read_char 1 0 0 key; if (key ~= 0) x = self.playEndNew(key); } print "^"; return (x); ], listSongs [; if (SongBag --> 0) print " (O) Ode to a Duck: Summons a duck^"; if (SongBag --> 1) print " (R) Rainy Day: Increases the water capacity of clouds^"; if (SongBag --> 2) print " (H) Heavy Heart: Increases the force of gravity^"; if (SongBag --> 3) print " (J) Lively Jig: Induces dancing in animate creatures^"; if (SongBag --> 4) print " (S) Springtime Love: Enhances the effects of love^"; if (SongBag --> 5) print " (D) Dab of Colour: Alters the effects of light^"; if (SongBag --> 6) print " (L) Literal Melody: Turns large purple vault doors into hamsters^"; if (SongBag --> 7) print " (M) Modulation of Spirit: Transposes musical keys^"; print " (X) None^"; ], oneSong [; if (self hasnt firstTime) { ! First time ever give self firstTime; move theDuck to location; print "You raise the trumpet to your lips and tentatively play the first few notes of ~Ode to a Duck~."; print " The notes seem to come easily under your fingers and you definitely sound better than you ever have before."; print " But most surprisingly, the end of the song is coupled with the appearance of a white duck!"; if (Leonine in location) " Leonine claps and laughs. ~Told ya you'd have some fun!~"; ""; } if (theDuck in location || parent(theDuck) in location) ! Duck here already "The melody from ~Ode to a Duck~ echoes through the air but nothing happens."; give theDuck ~asleep; move theDuck to location; "As soon as you have finished ~Ode to a Duck~, a duck appears in front of you."; ! Normal ], playEnd [key; if (SongBag --> 0 && key == 79 or 111) return (DUCK); if (SongBag --> 1 && key == 82 or 114) return (RAIN); if (SongBag --> 2 && key == 72 or 104) return (HEAVY); if (SongBag --> 3 && key == 74 or 106) return (JIG); if (SongBag --> 4 && key == 83 or 115) return (LOVE); if (SongBag --> 5 && key == 68 or 100) return (COLOUR); if (SongBag --> 6 && key == 76 or 108) return (LITERAL); if (SongBag --> 7 && key == 77 or 109) return (MODULATE); if (key == 88 or 120) { print (string) random("^You lower the trumpet.^", "^You put your trumpet away.^", "^You change your mind and put the trumpet away.^"); return (9); } return (0); ], playEndNew [key; if (key == 79 or 111) return (1); if (key == 68 or 100) return (2); if (key == 72 or 104) return (3); if (key == 74 or 106) return (4); if (key == 88 or 120) { print (string) random("^You lower the trumpet.^", "^You put your trumpet away.^", "^You change your mind and put the trumpet away.^"); return (9); } return (0); ], playPick [song; if (SongBag --> (song - 1)) { switch (song) { DUCK: <>; RAIN: <>; HEAVY: <>; JIG: <>; LOVE: <>; COLOUR: <>; LITERAL: <>; MODULATE: <>; } } "You don't know that particular ditty."; ], playSong [key song; song = 0; if (key == 88 or 120) { print (string) random("^You lower the trumpet.^", "^You put your trumpet away.^", "^You change your mind and put the trumpet away.^"); rtrue; } if (SongBag --> 0 && key == 79 or 111) song = DUCK; if (SongBag --> 1 && key == 82 or 114) song = RAIN; if (SongBag --> 2 && key == 72 or 104) song = HEAVY; if (SongBag --> 3 && key == 74 or 106) song = JIG; if (SongBag --> 4 && key == 83 or 115) song = LOVE; if (SongBag --> 5 && key == 68 or 100) song = COLOUR; if (SongBag --> 6 && key == 76 or 108) song = LITERAL; if (SongBag --> 7 && key == 77 or 109) song = MODULATE; if (song == 0) rfalse; print "^"; switch (song) { DUCK: <>; RAIN: <>; HEAVY: <>; JIG: <>; LOVE: <>; COLOUR: <>; LITERAL: <>; MODULATE: <>; } ], has ~flag ! Normal trumpet / Magic Trumpet ~firstTime ! Never played Magic / Played for the first time ~general; ! Normal Songs in Endgame / Medley Songs in Endgame MusicObj ColourMusic "~Dab of Colour~" with name "dab" "colour" "indigo", songNum COLOUR, description [; style bold; print "^Dab of Colour^"; style roman; "Alters the effects of light^^This piece is fairly short but dances through the upper register quite freely, outlining major sixths and minor thirds."; ]; MusicObj HeavyMusic "~Heavy Heart~" SDesk with name "heavy" "heart", songNum HEAVY, short_name [; if (self hasnt firstTime) print "a piece of sheet music titled "; ], description [; style bold; print "^Heavy Heart^"; style roman; "Increases the force of gravity^^This piece is a hand-printed copy and was probably written by Finney himself."; ], before [x; Cut: if (JigMusic has flag) "You've already edited one piece of music; you don't need to cut this one too."; if (second == jigSaw) "There's no reason to cut the music up with the jigsaw."; Take: if (self notin player) { if (self hasnt firstTime) give self firstTime; x = self.songNum - 1; SongBag --> x = 1; move self to player; "Taken."; } "You are already carrying that."; ], has ~firstTime; ! Never taken / Been taken MusicObj JigMusic "~Lively Jig~" with name "lively" "jig", songNum JIG, description [; style bold; print "^Lively Jig^"; style roman; print "Induces dancing in animate creatures^^"; if (self hasnt flag) "This piece is quite long; it's two pages in length with numerous repeats and other markings."; "The sheet music has been surgically cut in half, right after a big sectional division."; ], before [x; Cut: if (self has flag) "The jig music has already been cut."; if (second == jigSaw) { give self flag; score = score + 3; "You slice through the jig with the jigsaw, carefully so as not to destroy the sheet. When you are done, the piece is only half as long.^^[You have just gained three points in Musical Editing.] "; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } if (second == nothing) "It would be all too easy to tear an important part in the music if you used your bare hands."; "You can't cut the jig with that."; Learn: if (self notin player) "You need to be holding the music to memorize it."; if (self hasnt flag) "You diligently study the piece in hopes of memorizing it, but it's just too long. Before you are two-thirds of the way through it, you've forgotten the first melody."; x = self.songNum - 1; SongBag --> x = 1; remove self; "You diligently commit the song to memory and then tuck the music away."; Take: if (self notin player) { if (self hasnt firstTime) { give self firstTime; } give self ~scenery; move self to player; "Taken."; } "You are already carrying that."; ], has ~firstTime ! Never taken / Been taken scenery ! initial is in musicStand, prevent double description ~flag; ! Not cut / Cut MusicObj LiteralMusic "~Literal Melody~" TowerTop with name "literal" "melody", songNum LITERAL, description [; style bold; print "^Literal Melody^"; style roman; "Turns large purple vault doors into hamsters^^The tune to this piece is fairly straightforward, with hard accented downbeats and standard cadences."; ], before [x; Take: if (self notin player) { if (self hasnt firstTime) { if (TTBars in TowerTop) "You cannot seem to reach the music through the grey bars."; give self firstTime; } x = self.songNum - 1; SongBag --> x = 1; move self to player; "Taken."; } "You are already carrying that."; ], has ~firstTime ! Never taken / Been taken scenery; ! Initial is in TTBars, prevent double description MusicObj LoveMusic "~Springtime Love~" ButlerCottage with name "love" "spring" "springtime" "frame" "framed", songNum LOVE, description [; style bold; print "^Springtime Love^"; style roman; "Enhances the effects of love^^It is a soaring melody which will really show off the lyrical qualities of the soloist's instrument."; ], before [; Take: "The framed music is firmly attached to the wall."; ], has scenery; ! initial is in ButlerCottage, prevent double description MusicObj ModulateMusic "~Modulation of Spirit~" InsideVault with name "modulation" "spirit" "modulate", songNum MODULATE, initial "A piece of sheet music has been left on the ground, entitled ~Modulation of Spirit~. ", description [; print "This sheet music looks like it has never been played by anyone else. Across the top,^"; style bold; print "^Modulation of Spirit^"; style roman; "Transposes musical keys^^is written in fancy lettering. The piece consists mostly of rapid arpeggios cycling through many distinct key centers."; ]; MusicObj RainMusic "~Rainy Day~" MagicLab with name "rain" "rainy" "day" "scroll", songNum RAIN, initial [; if (self hasnt general) give self general; "Wedged under a pyramid-shaped model is a scroll with ~Rainy Day~ scrawled on the outside."; ], description [; style bold; print "^Rainy Day^"; style roman; "Increases the water capacity of clouds^^This looks to be a standard weepy ballad in true Papoosen style."; ], before [x; Take: if (self hasnt flag) "You don't feel right taking Leonine's music without his permission."; if (self notin player) { if (self hasnt firstTime) { give self firstTime; give MLPyramid ~scenery; x = self.songNum - 1; SongBag --> x = 1; move self to player; score = score + 1; "You retrieve the scroll from underneath the model, which wobbles without the extra support.^^[You have just gained one point for Upsetting a Pyramid.] "; } x = self.songNum - 1; SongBag --> x = 1; move self to player; "Taken."; } "You are already carrying that."; ], has ~firstTime ! Never taken / been taken ~flag ! No permission / Leonine's permission given ~general; ! Never been seen / Seen ! ########################################################################################################## ! Inventory ! armadillo ! blackPiece (black puzzle piece) ! boxKey (Leonine's key) ! cup (empty) ! cupMud ! cupWater ! doorKey (silver key) ! endDoor (wooden door) ! fishBomb (unstable herring) ! heavyRock ! herring ! instructions ! jigSaw ! lostRing ! mazeMarker ! mirror ! musicStand ! note ! rubber ! whitePiece (white puzzle piece) ! ! ########################################################################################################## InvObj armadillo "armadillo" with short_name [; if (self has flag) print "broken "; else print "wooden "; ], parse_name [i j; if (self has flag) j = 'broken'; else j = 'armadillo'; while (NextWord() == 'wooden' or 'sculpture' or 'cute' or 'armadillo' or j) i++; return i; ], initial "Sitting on the ground is a cute wooden armadillo. ", description [; if (self has flag) "The poor armadillo is missing its legs from the fall."; "For a musician's work, you think the wooden armadillo is quite well-formed. It only weighs a few pounds."; ], before [; Attack: "You knock on the sides of the armadillo, but find that it's not hollow."; Cut: if (second == jigSaw) { if (self has flag) "Cutting the armadillo even more won't help its current handicap."; "You smooth out some of the edges on the armadillo."; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the armadillo with your bare hands."; Eat: "You've heard that roast armadillo was a delicacy, but it probably doesn't apply to the wooden variety."; Lift: "The armadillo is quite light."; Listen: "You put your ear up to the wooden armadillo's mouth but it does not speak."; Open: "The armadillo has no secret panels to open."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Search: "You find nothing untoward about the wooden armadillo."; Squeeze: "You give the armadillo a friendly squeeze."; Touch: "The armadillo feels like it's made out of a soft wood."; ], has ~flag; ! Not broken / Broken PuzzlePiece blackPiece "black puzzle piece" PavedRoad with name "black" "puzzle" "piece" "heavy" "pieces//p", slot 2, initial "A small puzzle piece sits in the road, blown in by the wind and forgotten. ", description [; print "The heavy 3 by 3 inch puzzle piece fits in the palm of your hand."; print " One side of the piece is plain paperboard, but the other side seems to depict an epic struggle between man and beast in an extremely dark room."; print " So dark, in fact, that it's anyone's guess as to what is really happening.^^"; font off; print " *****^ *****^ ******^ *****^ *****"; font on; rtrue; ], before [; Fire: if (player in EastHouse && EHSlingshot in EastHouse && self in EHSlingshot) <>; "That's not something you can shoot."; Take: if (self hasnt firstTime) { score = score + 1; give self firstTime; move self to player; "Taken.^^[You have just gained a point for Piece Collecting.] "; } rfalse; ]; KeyObj boxKey "copper key" with name "key" "copper", description "The copper key is two inches long and has a single groove in it. ", before [; Take: if (self in Leonine) "Leonine slaps your hand away. ~Offa my key, you malefactor!~"; if (self hasnt firstTime) { score = score + 1; give self firstTime; move self to player; if (Leonine in location) print "Leonine doesn't seem to notice your actions. "; "You pick up the key, intending to return it as soon as you've finished with it.^^[You have just gained a point for the Borrowing Dance.] "; } ], has ~firstTime; ! Never taken / Been taken InvObj cup "empty metal cup" MHTable with name "cup" "metal" "empty", description [; print "The cup has its share of dents and scratches from accumulated use. It looks big enough to hold several fifths of liquid"; if (self hasnt firstTime) { give self firstTime; print ", but thankfully, any obscure jokes about parallel fifths have been omitted"; } "."; ], before [; Drink: "The cup is empty."; Empty: "The cup is already empty."; Fill: "You need to specify what you wish to fill the cup with."; PutUnder: if (second == theDuck) "It's highly unlikely that the duck would lay an egg in the cup."; Smell: "The cup has no scent."; Taste: "Licking the cup leaves an odd tang on your tongue."; ], has ~firstTime; ! Never taken / Been taken InvObj cupMud "cup of mud" class MudObj, with name "cup" "metal" "of" "mud" "dirt" "earth", description "The cup has its share of dents and scratches from accumulated use. In the cup, you see some mud. ", before [; Drink, Eat, Glock: "It may look like fudge, but you really don't want to eat it."; Examine: "The mud has a rich brown texture."; Empty: remove self; move cup to player; "You empty out the mud. It is quickly absorbed in the ground."; Insert: if (second == EHSlingshot) rfalse; if (second == refBook or pamphlet or LBox or codeBook or poontBook or instructions) "There's no need to deface possibly valuable literature."; if (second == PLHole) "You're afraid that might damage the prototype."; remove self; move cup to player; switch (second) { EHTree: "You pour mud on the stunted tree. It doesn't seem to help."; FPPond: "The mud oozes into the pond and dilutes in the water."; VCDrain: "You empty the mud into the drain."; cupMud: "You can't do that."; default: "You dispose of the mud."; } PutOn: if (second has supporter) { move self to second; "You put the cup of mud on ", (the) second, "."; } "Putting things on ", (the) second, " would achieve nothing."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Receive: "The cup is already full."; Search: "You run your fingers through mud, but you don't find anything."; Smell: "The mud smells about as unappetizing as it looks."; Take: if (onotheld_mode == 0 || noun notin player) if (AttemptToTakeObject(noun)) rtrue; if (AfterRoutines() == 1) rtrue; notheld_mode = onotheld_mode; if (notheld_mode == 1 || keep_silent == 1) rtrue; L__M(##Take,1); rtrue; Taste: "Yep, it tastes like mud. Even down to that oddly piquant 'a la earthworm' tang."; ], has ~firstTime; ! Never taken from DeadEnd / Been taken InvObj cupWater "cup of water" with name "cup" "metal" "of" "water", description "The cup has its share of dents and scratches from accumulated use. In the cup, you see some water. ", before [; Drink, Eat, Glock: remove self; move cup to player; "You drain the cup of water. Refreshing!"; Empty: remove self; move cup to player; "You empty out the water. It is quickly absorbed in the ground."; Insert: if (second == EHSlingshot) rfalse; if (second == refBook or pamphlet or LBox or codeBook or poontBook or instructions) "There's no need to deface possibly valuable literature."; if (second == PLHole) "You're afraid that might damage the prototype."; if (second == MHFudge) "That would spoil a perfectly good brownie."; if (second == cupWater) "The cup is already full of water."; remove self; move cup to player; switch (second) { DRPlant: "The fern looks a little happier now."; EHTree: EHTree.waterCount++; if (EHTree.waterCount > 5) "You pour water on the stunted tree but it looks no better. You get the feeling that you're wasting time."; "You pour water on the stunted tree. However, it's going to take more than a few cups of water to nourish it."; FPPond: "You empty your cup into the pond."; LLPine: "You pour water on the petite plastic pines. Perhaps they'll grow if you wait around long enough."; VCDrain: "You empty the water into the drain."; default: "The water quickly drains away."; } PutOn: if (second has supporter) { move self to second; "You put the cup of water on ", (the) second, "."; } if (second == MHFudge) "That would spoil a perfectly good brownie."; "Putting things on ", (the) second, " would achieve nothing."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Receive: "The cup is already full."; Search: "You don't find anything in the water."; Smell: "There is no discernible scent to the water."; Take: if (onotheld_mode == 0 || noun notin player) if (AttemptToTakeObject(noun)) rtrue; if (AfterRoutines() == 1) rtrue; notheld_mode = onotheld_mode; if (notheld_mode == 1 || keep_silent == 1) rtrue; L__M(##Take,1); rtrue; Taste: "You take a tiny sip. There is no particular flavour in the water."; ]; KeyObj doorKey "silver key" with name "key" "silver" "ridges" "grooves", initial "There is a small silver key here. ", description "The key is unusually small, about the length of your pinky, and it has an intricate collection of grooves and ridges."; InvObj endDoor "wooden door" InsideVault with name "door" "wooden" "knob" "doorknob" "open" "closed", initial "Leaning against one wall of the vault is a plain wooden door. ", description [; print "The door is like many others that you've seen up in Papoosen, with the exception that it has no hinges. A round doorknob is set into one side"; if (RWKeyhole in RockWall) " with a tiny keyhole in the center of it."; "."; ], before [; Close: if (self notin RWDepression) "Closing a stand-alone door is fairly useless."; if (self has open) { give self ~open; remove RWCubbyhole; "You shut the door."; } "The door is already closed."; Attack: "From the looks of it, this door is no strange to dents and scratches, but it seems to have held up pretty well."; Enter: if (self notin RWDepression) "The door leads nowhere."; <>; Insert: if (second == VCBuilding or OCBuilding or LLDoor or LHHouse) "The door is too large to fit into the doorway here."; if (second == RWDepression) { move self to RWDepression; give self lockable; give self locked; give self ~open; score = score + 1; print "You gently set the wooden door into the marble depression. It fits almost perfectly!"; print " There is an audible sound, much like seven squirrels swallowing whole acorns, and suddenly the door has become a part of the marble face.^^"; print "[You have gained one point in Creative Exits.]^^Elated to at last have means to return to the surface, you step up to the door and turn the doorknob to find...^^"; print "Locked! The doorknob won't turn, despite your most valiant efforts! Upon closer inspection, a tiny keyhole has appeared in the knob. "; move RWKeyhole to RockWall; if (Leonine notin location) { move Leonine to location; print "As if somehow hearing your moan of despair, Leonine puffs into existence nearby. He looks at your predicament and "; } else print "Leonine "; give Leonine flag; print "cackles gleefully. ~What didja think? That you could get outta here without your standard 'Find-the-Key-to-The-Locked-Door' puzzle?~"; " He slaps you heartily on the back and wheezes. ~I think old Finney had the key last, though I could be wrong. Sniveling snails! The easiest thing fer you to do would be to check the history books down at the library.~"; } Knock: if (self notin RWDepression) "You knock on the door and then answer it from the other side."; "You knock on the door, but no one answers."; Listen: "You put your ear to the door, but surprisingly, you hear nothing on the other side."; Lock: if (self notin RWDepression) "There is no keyhole on the door."; if (self has locked) "The door is already locked."; "The keyhole seems to have disappeared."; LookUnder: "There's nothing underneath the door."; Open: if (self notin RWDepression) "Opening a stand-alone door is fairly useless."; if (self hasnt open) { if (self has locked) "The door won't open. Perhaps it is locked."; give self open; move RWCubbyhole to RockWall; "You open the door to reveal a small cubbyhole in the rock."; } "The door is already open."; Pull, Push, PushDir: "Moving the door around won't help."; PutUnder: if (second == theDuck) "Doing that would not make the duck any more a-door-able."; Remove: if (self in RWDepression) "The door seems to have become a permanent part of the marble face."; Search: "You scan the surface of the door, but find nothing untoward."; Smell: "The door smells like oak."; Take: if (self in RWDepression) "The door seems to have become a permanent part of the marble face."; Taste: "Because of its rough, and possibly splintery appearance, you refrain from licking the door."; Touch: "The surface of the door is rough and unfinished."; Unlock: if (self notin RWDepression) "There is no keyhole on the door."; if (self hasnt locked) "The door is already unlocked."; if (second == boxKey) "The key doesn't fit in the lock."; if (second ~= doorKey) "That doesn't seem to fit in the keyhole."; give self ~locked; remove doorKey; remove RWKeyhole; move RWCubbyhole to RockWall; Cutscenes.count++; score = score + 1; print "As the key gets closer to the keyhole, it leaps out of your hand, embedding itself in the doorknob. The knob turns slightly and both key and keyhole fade from view.^^[You have just earned one point for Tolerating Yet Another Locked Door Puzzle.] "; if (Leonine in location) "^^Leonine peers at the door through one eye. ~And away you go! If you really want to go home, you'll have to find a way to sneak out of the castle!~"; ""; ], after [; Take: if (self hasnt firstTime) { give self firstTime; "The door is rather unwieldy, but you manage to balance it on one shoulder. A good thing too, since you already had to solve two ~limited inventory~ puzzles down here."; } "You heft the door over your shoulder."; ], has ~firstTime ! Never taken / been taken ~lockable ! No keyhole / Door in depression and keyhole appeared ~locked; ! No keyhole / Door in depression and locked InvObj fishBomb "unstable herring" with name "bomb" "fish" "herring" "unstable", timer 4, start [; StartDaemon(self); ], daemon [; self.timer--; if (self.timer == -1) StopDaemon(self); if (self in player || self in location) { switch (self.timer) { 3: rtrue; 2: "^The unstable herring quivers almost imperceptibly."; 1: "^The unstable herring quivers. Either it's coming back to life or it's about to explode."; 0: deadflag = 1; "^KABOOM! The herring explodes with a force belied by its small stature. Your last thought before you are incinerated is that perhaps you should have found a better place to put the herring."; } } if (self in PoontLab && self.timer == 0) { give PoontLab ~visited; give PoontLab ~firstTime; give PoontLab flag; remove PLChairs; remove PLContraptions; remove PLHole; remove PLPrototype; remove PLViewer; while (child(PoontLab) ~= nothing) remove child(PoontLab); move PLRubbish to PoontLab; if (player in PrivateAlley || player in MirrorRoom) "^A loud explosion rocks Poont's Lab and a wave of heat rushes across your back. When the smoke clears, you see that you've caused quite a bit of destruction behind you."; if (player in Bank || player in NorthGate || player in BearsDen) "^In the distance you hear a muffled explosion."; } ], before [; Eat: "You have a really bad feeling about eating the unstable herring."; ]; InvObj heavyRock "heavy rock" NPPile class GraniteObj, with name "rock" "heavy" "stone" "manageable" "small", dropCount 0, ! Times dropped in the gaping hole description "The burdensome rock has a coarse texture which luckily provides a good grip. ", before [; Drop: if (player in PBPuddle) <>; else rfalse; Enter: "There's no reason to balance on the rock."; Insert: if (second == SQHole) { move heavyRock to NPPile; move ML2Rocks to MullogsLair; ML2Rocks.rockCount++; NPPile.rockCount--; if (player in SQScale) print "You crouch at the side of the platform and "; else print "You "; print "drop the rock into the gaping hole. After several seconds, you hear a faint crash far below."; self.dropCount++; if (self.dropCount == 6) " You're getting quite adept at dropping big rocks in holes. Perhaps you should do it for a living."; ""; } if (second == PBPuddle) { move heavyRock to NPPile; NPPile.rockCount--; "The rock sinks into the mud and quickly disappears."; } if (second == QETrapdoor) { if (QETrapdoor has open) "The rock doesn't quite clear the edges of the trapdoor."; "The trapdoor is closed."; } PutUnder: if (second == QEScale) { "There isn't quite enough room underneath the platform for the rock."; } Push, Pull, PushDir: if (self in player) "You are carrying the rock."; "The rock is too uneven to roll with much success. You'd be better off carrying it."; Remove: if (self in SQScale) <>; Take: if (self in player) "You're already carrying a rock."; if (child(player) ~= nothing) "You're carrying too much to pick up the rock."; print "You struggle underneath the weight of the rock."; player.capacity = 1; if (heavyRock in NPPile) NPPile.rockCount++; if (heavyRock in SQScale && player notin SQScale) { give SQScale flag; print " The wooden platform returns to its original height."; } move self to player; ""; ], after [; Drop: player.capacity = MAX_CARRIED; PutOn: if (second == SQScale) { move self to SQScale; player.capacity = MAX_CARRIED; give SQScale ~flag; print "With a grunt, you drop the heavy rock on the wooden platform. The platform squeals like a mad pack of rodents and sinks about two feet."; if (self hasnt firstTime) { score = score + 1; give self firstTime; "^^[You have earned one point in Mineral Levitation.] "; } ""; } if (second == QEScale) { player.capacity = MAX_CARRIED; if (player in QEScale) { move self to QEScale; "You drop the heavy rock next to you on the platform."; } move self to QuarryEntrance; "The rock rolls down the slanted platform and ends up on the floor."; } ], has ~firstTime; ! Never placed on platform / Been placed before InvObj herring "herring" FPPond with short_name [; if (self has flag) print "blue "; else print "red "; ], parse_name [i j; if (self has flag) j = 'blue'; else j = 'red'; while (NextWord() == 'herring' or 'fish' or j) i++; return i; ], description [; if (self has asleep) { ! If not in Pond, herring is dead (asleep = dead here) print "The "; self.showColour(); " herring is quite thoroughly dead and limp."; } self.pondText(); ""; ], orders "The herring probably doesn't understand you.", life [; Ask, Answer, Give, Order, Show, Tell: "The herring probably doesn't understand you."; Attack, ThrowAt: "It's probably not a good idea to get the grizzly bear riled up."; Kiss: "You don't want to get that close to the bear."; ThrowAt: "You have a feeling that the herring would dodge before anything could get close enough."; WakeOther: if (self has asleep) "That's quite impossible."; "The herring is awake."; default: "You'll have to catch the herring before you can do that."; ], before [; Attack: if (self has asleep) ! Dead "The fish is already dead. Your attacks, no matter how skilled would be ineffective."; if (self has flag) ! Alive and High "You slap the water near the fish, causing it to dart away."; "The fish is too deep in the pond to attack."; ! Alive and Low Catch, Take: if (self in player) "You are already carrying that."; if (self has asleep && self notin player) { move self to player; "Taken."; } if (self has flag && self in FPPond) "You grab at the fish, but it is too quick to catch."; if (self in FPPond) "The fish is too deep in the pond to catch."; Count: print "One fish, one fish, "; self.showColour(); print " fish, "; self.showColour(); " fish."; Eat: if (self has asleep) "The raw herring looks unappetizing, to say the least."; "First you'll have to catch it."; Insert: if (second == EHTree) "It will take more than a herring to fertilize this tree."; if (second == LLPine) "Fertilizing plastic plants is almost as useless as putting stilts on a giraffe."; JumpOver: if (self has asleep && self in location) "You hop over the dead herring."; Lift: if (self notin FPPond) "The herring is quite light."; "The herring is in the pond right now."; Open, Search: if (self notin FPPond) "You stick your finger in the herring's mouth, but find nothing."; "The herring is in the pond right now."; Pull, Push: if (self notin FPPond) "You tug on the herring's tail."; "The herring is in the pond right now."; Smell: if (self notin FPPond) "Something smells fishy about this herring."; "The herring is in the pond right now."; Squeeze: if (self notin FPPond) "You give the dead fish a friendly squeeze."; "The herring is in the pond right now."; Stretch: if (self notin FPPond) "That wouldn't be proper."; "The herring is in the pond right now."; Taste: if (self notin FPPond) "The thought of licking a raw fish is not appetizing."; "The fish is in the pond right now."; Touch: if (self has asleep) "The fish is cold to the touch."; "You grab at the fish but it darts out of reach."; Wave: if (self in player) "You wave the dead herring over your head."; "You need to be holding the herring before you can wave it around."; ], changeColour [; if (self has flag) { give self ~flag; "The herring becomes a shade of red again and quickly dives deeper into the pond."; } give self flag; print "The herring shimmies about confusedly as it changes from red to a deep blue. As if it notes the colour shift, it swims higher up in the pond, until it again is camouflaged against the sides of the pond."; if (self hasnt general) { give self general; score = score + 1; "^^[You have just gained one point for Looking Past a Red Herring.] "; } ""; ], pondText [; if (self in FPPond) { if (self hasnt flag) { print "Deep in the pond, "; if (random(100) < 50) print "almost invisible against the pond walls, "; } else { if (self hasnt asleep) print "Near the surface of the pond, "; else print "Floating on the surface of the pond, you see "; } print "a "; self.showColour(); print " herring"; if (self hasnt asleep) print (string) random(" swims in lazy circles. ", " darts about. ", " can be seen. "); else print "."; } ], showColour [; if (self has flag) print "blue"; else print "red"; ], has ~flag ! Red / Blue ~asleep ! Not dead yet. Feel's fine / dead animate; InvObj instructions "penned note" BSafe with name "instructions" "penned" "note", description "Written here are step-by-step instructions to enter Poont's house."; InvObj jigSaw "jigsaw" with name "jigsaw" "saw" "blade" "handles" "handle", initial "A portable mechanical jigsaw sits on the floor of the workshop. ", description "The mechanical jigsaw is fairly compact and consists of a long thin blade between two handles. Evidently, the blade vibrates back and forth when the handles are pulled. ", before [; Cut: if (second == jigSaw) { "You can't seem to turn the saw to the right angle to cut itself."; } if (jigSaw in player) { print "(with the jigsaw)^"; <>; } "You can't cut the jigsaw with your bare hands."; Eat: "That would surely be unappetizing, not to mention painful."; Lift: if (self hasnt firstTime) { give self firstTime; "You lift the jigsaw over your head a few times.^[You have just gained +1 Strength. Please roll your seven-sided die to determine the bonus.] "; } "You lift the jigsaw a few times. It is fairly light."; Listen: "The jigsaw is silent. It must be one of those quiet-operation models."; Open: "There are no compartments on the jigsaw."; Play: "You've seen several talented saw-performers, but you aren't one of them."; Pull, Stretch: "You pull on the ends of the jigsaw and the blade moves."; Search: "There is nothing unusual about the saw."; Smell: "The jigsaw smells nondescript."; ], has ~firstTime; ! Never lifted / been lifted InvObj lostRing "gold ring" with name "gold" "ring", description [; print "The ring is painstakingly detailed with abstract lines and shapes. It must have been very special to whoever lost it."; if (Mullog has flag) " Currently, it is being worn by Mullog."; ""; ], before [; Catch: "You toss the ring up in the air and catch it."; Eat: "The ring doesn't look appetizing."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Take: if (self hasnt firstTime) { score = score + 1; give self firstTime; move self to player; "Taken.^^[You have just gained a point for ~Insert Witty Punchline about Gold Ring Here~.] "; } if (Mullog has flag) "Mullog slaps your hand away. ~Mullog's ring!~"; Wear: "The ring is just a little too small for any of your fingers."; ], has ~firstTime; ! Never been taken / been taken InvObj mazeMarker "scrap of paper" MazeEntrance with name "paper" "letter" "marker" "scrap" "maze" "note", initial "A small scrap of paper is caught in the brambles.", description [; if (self in player) "-*Gratuitous Maze Marker*-^This scrap of paper is a red herring with no purpose in the Nolava Odd Community. It has been created solely to help you map out the Maze of Dread. Be merry!"; "You can't make out what it says from here."; ], before [; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Take: if (self hasnt firstTime) { give self firstTime; move self to player; "You delicately pick the note out of the brambles."; } ], has ~firstTime; ! Never been taken / been taken InvObj mirror "round mirror" MirrorRoom with name "mirror" "round" "small", initial "Sitting neglected in the corner is a small round mirror.", description "This mirror looks different than the others in Poont's Mirror Room. It looks like the kind people would hang in their living rooms.", before [; Attack, Burn, Cut: "You have the feeling that it might be better to keep this mirror intact."; Drop: move self to parent(player); "You gently set the mirror down."; Enter: "You try to step through the mirror, but it would seem that you're in the wrong adventure."; Examine, Search: "You gaze into the mirror, but unlock no secrets."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Hang: if (player in VaultDoor) <>; Touch: "You touch your reflection."; ]; InvObj musicStand "music stand" MusicSalon with name "music" "stand" "black", initial [; if (JigMusic in self) "Someone has left a piece called ~Lively Jig~ on the music stand in the corner of the room."; else "A metal stand is in the corner of the room."; ], description [; if (self in MusicSalon) print "It is a standard black metal stand sitting in the corner of the room."; else print "It is a standard black metal stand."; if (child(self) ~= nothing) { print " On the stand, you can see "; WriteListFrom(child(self), ENGLISH_BIT); "."; } ""; ], before [; Climb, Enter: "The stand would probably buckle underneath your weight."; Cut: if (second == jigSaw || jigSaw in player) "The metal of the stand is too tough to cut through."; "You can't cut the music stand with your bare hands."; Lift, LookUnder: "There is nothing under the stand."; Pull, Push: "You adjust the stand's position slightly."; Receive: if (noun == JigMusic) give JigMusic scenery; rfalse; Take: if (JigMusic in self) { move JigMusic to player; move self to player; if (JigMusic hasnt firstTime) { give JigMusic firstTime; } give JigMusic ~scenery; "You pick up the stand and the sheet music as well."; } ], has supporter; ! Can support objects InvObj note "dead man's note" QuarryEntrance with name "paper" "letter" "note" "dead" "man^s", description [; if (self in player) "THINGS TO DO TODAY:^- fix crumbling wall^- find my lost ring^- replace worn chains on the rock elevator "; if (self hasnt firstTime) "You can't read it when it's clutched in the hand."; "You can't read it from here."; ], before [; Drop: if (player in PBPuddle) "If you dropped the note in the puddle, you wouldn't be able to read it anymore."; Insert: if (second == SQHole) { move self to MullogsLair; if (player in SQScale) print "You crouch at the side of the platform and "; else print "You "; "drop the note into the gaping hole, but hear only silence as a result."; } Pull: if (self hasnt firstTime) <>; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Take: if (self hasnt firstTime) { give self firstTime; give self ~scenery; move self to player; "You pry the note from the bony fingers."; } ], has ~firstTime ! Never been taken / been taken scenery; ! initial in QEHand, prevent double descriptions InvObj rubber "rubber band" OldQuarry with name "rubber" "band" "stretchy" "length" "of", initial "A discarded length of rubber lies on the ground.", description "The length of rubber is nearly two feet long, unstretched. Age has worn down the ends, but the middle still looks quite strong.", before [; Enlarge, Pull, Stretch: "Grasping an end in each hand, you stretch the rubber another half a foot before its resistance becomes too great and it snaps back."; Burn: "The smell of burnt rubber isn't the most pleasant aroma in the world."; Cut: "You can't cut the rubber with your bare hands."; Eat, Taste: "You delicately lick one end of the rubber length, leaving a sour aftertaste on your tongue."; PutOn: if (second has supporter) { move self to second; "You put the rubber on ", (the) second, "."; } <>; JumpOver: "Using the length of rubber as a skipping rope, you do a quick set of jumps."; PutUnder: if (second == theDuck) "The duck would probably resent being used as a paperweight."; Smell: "The smell of rubber is intermingled with the leftover scent of the quarry where it was found."; Swing, Wave: "Swinging the rubber length through the air produces a whirring sound."; Take: if (self hasnt firstTime) { score = score + 1; give self firstTime; move self to player; "Taken.^^[You have just gained a point in Rubber Recycling.] "; } Tie: if (second == player) "Rubberware is not the latest in Papoosen fashions."; switch (second) { OQPillars: move self to OldQuarry; "You wrap the rubber around one of the pillars but the knot doesn't hold. The rubber band flies across the quarry, narrowly missing you."; DETrapDoor: "There doesn't seem to be anywhere on the trapdoor to tie it."; EHTree: remove EHTree; move EHSlingshot to EastHouse; move EHRubber to EastHouse; remove self; score = score + 1; print "You tie the rubber between the fork of the tree, creating a makeshift slingshot in the process.^^[You have just gained one point in Doing Goofy Things With Rubber.] "; if (Leonine in location) "^^Leonine chuckles. ~Clever neighbour!~"; ""; } Touch: "The rubber feels pliant."; Wear: "Rubberware is not the latest in Papoosen fashions."; ], has ~firstTime; ! Never been taken / been taken PuzzlePiece whitePiece "white puzzle piece" MSPiano with name "white" "puzzle" "piece" "pieces//p" "light", slot 1, description [; print "One side of the piece is plain paperboard, but the other side shows a vivid depiction of a blindingly white snowstorm. Or perhaps the artist just forgot to paint anything.^^"; font off; print " OOOOOO^ OOOOOO^ OOOOO ^ OOOOOO^ OOOOOO"; font on; rtrue; ], before [; Take: if (self hasnt firstTime) { score = score + 1; give self firstTime; move self to player; "Taken.^^[You have just gained a point for Finding Something in an Illogical Location.] "; } if (self notin player) { move self to player; "Taken."; } ], has ~firstTime; ! Never been taken / been taken ! ########################################################################################################## ! Books ! codeBook (Building Codes manual) ! diary (Butler's diary) ! musBook (Finney's Dictionary) ! pamphlet (Timeline pamphlet) ! poontBook (Experiment book) ! refBook (Reference Tome) ! ! ########################################################################################################## BookObj codeBook "Building Codes manual" COCounter with parse_name [i j; if (location == LibraryLane or NorthGate or OutCourt or VolcanoCenter) j = 'codes'; else j = 'building'; while (NextWord() == 'codes' or 'manual' or 'book' or j) i++; return i; ], initial "Sitting atop the counter is a bound book entitled ~Nolava Odd Community Building Codes~.", description "The manual is composed of hand-written pages, detailing various construction jobs in the area.", openStr "You open up the Building Codes manual.^^(You are now in Book-Reading Mode. To look up a building code, type in the number of the code. To read about a random code, type in RANDOM. To close the book, type STOP).", closeStr "You shut the manual.", consult [w; wn = consult_from; w = NextWord(); if (w == 'random') { print "You flip to a random entry...^^"; w = random(116); } else print "You thumb through the manual looking for the correct entry...^^"; switch (w) { 1, '001', '1//': "#001 Nolava Construction Office: 1-N-05, Created from the Ploog Fund for the mining of granite and other materials beneath the ground. Ran into a few zoning problems with Mullog."; 2, '002', '2//': "#002 Wheelbarrow: 1-P-05, Wasted all of yesterday trying to move granite chunks bare-handed."; 3, '003', '3//': "#003 Quarry Rock Elevator: 1-Q-05, Useful for removing granite chunks from the quarry and lowering them into the Office for transportation."; 4, '004', '4//': "#004 Bed: 1-R-05, Built a granite bed. Not getting much sleep. Will make a more comfortable one once materials are shipped down from Papoosen."; 5, '005', '5//': "#005 Ladder: 1-S-05, Constructed to provide easier access to the surface."; 6, '006', '6//': "#006 Quarry Trapdoor: 1-T-05, Built to keep granite rocks from accidently falling through the elevator shaft."; 7, '007', '7//': "#007 Bed: 1-U-05, Lumber arrived from the surface today. Constructed a more comfortable bed."; 8, '008', '8//': "#008 Ladder Rung: 1-V-05, One of the rungs on the castle ladder back up to the surface broke."; 9, '009', '9//': "#009 Plaque Molds: 1-W-05, Constructed to build bronze plaques to place on some prominent buildings for posterity's sake."; 10, '010', '10': "#010 Metal Chain: 1-X-05, Created to replace the hemp rope on the elevator. Should reduce breakdowns by 90% per day."; 11, '011', '11': "#011 Armadillo Trap: 1-Y-05, Fashioned from spare parts to keep wild armadillos from invading my personal space."; 12, '012', '12': "#012 Rain Gauge: 1-Z-05, Rainstorm started today. Constructed the rain gauge for Leonine's experiments."; 13, '013', '13': "#013 Umbrella: 2-A-05, Fashioned for Finney at the start of a rainstorm."; 14, '014', '14': "#014 Midway Drain: 2-B-05, Installed after realizing that continued heavy rains could flood the Construction Office and ruin my toffee stash...grrr..."; 15, '015', '15': "#015 Midway Drain Grate: 2-D-05, Built over the drain system to prevent nesting armadillos from clogging the waterways."; 16, '016', '16': "#016 Quarry Wall: 2-E-05, Used last month's leftover masonry to keep Orchestra Pit from flooding the Quarry."; 17, '017', '17': "#017 Umbrella: 2-F-05, Had to make another umbrella, this time for Leonine, who was apparently suffering from parasol-envy."; 18, '018', '18': "#018 Armadillo Trap: 2-H-05, Realized that armadillos can escape from grass traps fairly easily. Used granite this time."; 19, '019', '19': "#019 Ladder Rungs: 2-M-05, Had to make four new rungs to replace the ones broken by Leonine's habit of jumping down five at a time."; 20, '020', '20': "#020 Leonine's House: 2-P-05, Built a house for the founder of the Odd Community."; 21, '021', '21': "#021 Armadillo Trap: 2-R-05, Realized that there was no openings in the armadillo trap for the little buggers to get into. Made a new one."; 22, '022', '22': "#022 Park: 2-S-05, Hoping to take advantage of the heavy rains, made a quaint little park north of Leonine's house."; 23, '023', '23': "#023 Park Path: 2-T-05, Stopped raining today. All the plants died. Tore out much of the garden and made a footpath through the center."; 24, '024', '24': "#024 Park Fence: 2-U-05, Built a quaint white picket fence around the perimeter of the park, because it was aesthetically pleasing."; 25, '025', '25': "#025 Drain System: 2-V-05, Expanded the drainage system to the east and south, in expectation of a sudden population burst. Currently there are 2 Odd residents and me living here."; 26, '026', '26': "#026 Southern Plaza: 2-W-05, Built a granite pavilion south of Leonine's house for all the Odd gatherings."; 27, '027', '27': "#027 Plaza Billboard: 2-X-05, Constructed a billboard in the plaza on the off-chance that Stebar Clocks needed a new advertising location."; 28, '028', '28': "#028 Statue of Leonine: 2-Y-05, Made a granite statue, twelve feet tall of Leonine."; 29, '029', '29': "#029 Armadillo Trap: 2-Z-05, Realized that having an opening in the side of an armadillo trap somewhat defeats the purpose of said trap. Made a little armadillo door."; 30, '030', '30': "#030 Finney's House: 3-A-05, Made a house to the southwest for Leonine's colleague Finney, a musician and scholar, and still quite odd."; 31, '031', '31': "#031 Finney's Pond: 3-B-05, Built a fish pond to elevate the social status of Finney's House. Quite useless since he spends most of his time indoors."; 32, '032', '32': "#032 Puzzle: 3-C-05, Fashioned a puzzle for Finney to play with, since he was bored and disrupting my work."; 33, '033', '33': "#033 Finney's Security System: 3-D-05, Installed a security system because of Finney's distrust of travelers (even though there haven't been any so far)."; 34, '034', '34': "#034 Xylophone: 3-G-05, Constructed from whale baleens to meet the specifications set forth by Finney. Had to let him come get it since I couldn't get it past the security system."; 35, '035', '35': "#035 Frog Statue: 3-H-05, Fashioned a giant froggie statue out of leftover granite and showcased it in the Southern Plaza."; 36, '036', '36': "#036 Fly Statue: 3-I-05, Made a fly statue to hang over the froggie statue. Accidently made it too heavy, causing it to break its supports and crash to the ground, cracking up the froggie too."; 37, '037', '37': "#037 Neo-Wonk Sculpture: 3-J-05, Tossed a few spare support bars into the statue mess and called it art."; 38, '038', '38': "#038 Plates: 3-K-05, Molded some granite plates for eating."; 39, '039', '39': "#039 Armadillo Decoy: 3-L-05, Realized that there are no armadillos in the Nolava Odd Community. Made a decoy so my trap and grate wouldn't go to waste."; 40, '040', '40': "#040 Finney's Road: 3-M-05, At Finney's insistence, I built a paved road from his home to the Construction Office."; 41, '041', '41': "#041 Designer Plates: 3-N-05, Painted hamsters on the plates and sold them as curiosities through an agent in Suburban Papoosen."; 42, '042', '42': "#042 Designer Forks: 3-O-05, Realized the possibilities of lucrative business and extended my line of granite eatware."; 43, '043', '43': "#043 Designer Noodle-Twisters: 3-P-05, Built a prototype for a granite noodle twister. Discarded it after realizing that I was probably catering to too small a clientele."; 44, '044', '44': "#044 Armadillo Decoy: 3-Y-05, Modeled a second decoy after the first in hopes of attracting an armadillo to capture and evict."; 45, '045', '45': "#045 Bank: 3-Z-05, Built to store the valuables of the Odd Community residents."; 46, '046', '46': "#046 Bank Trap: 4-A-05, Built to protect the bank from footpads."; 47, '047', '47': "#047 Harmonica: 4-B-05, Tried making a granite harmonica. Couldn't produce overtones."; 48, '048', '48': "#048 Northern Gate: 4-C-05, Erected a gate to protect the protected valuables in the protected bank."; 49, '049', '49': "#049 Armadillo Lair: 4-H-05, In hopes that a pre-fab home would attract an armadillo, I built one near the mess hall."; 50, '050', '50': "#050 Bounce Chamber: 4-K-05, Prepared for the Odd Community's four month life span with a granite Bounce Chamber in South Plaza."; 51, '051', '51': "#051 Checkerboard: 4-M-05, Replaced the Bounce Chamber at the last minute, for safety reasons."; 52, '052', '52': "#052 Mess Hall: 4-O-05, Got tired of eating off the ground. Felt the rock grit in my sandwiches might lead to future dental problems."; 53, '053', '53': "#053 Mess Hall Table: 4-P-05, Realized I was still eating off the ground in the mess hall. Made a table."; 54, '054', '54': "#054 Kitchen Counter: 4-Q-05, Built a granite counter in the Mess Hall kitchen to prepare food upon."; 55, '055', '55': "#055 False Armadillo: 4-T-05, Realized that armadillos are not indigenous to this area. Made a third decoy and put all the armadillo paraphernalia on display at the South Plaza."; 56, '056', '56': "#056 Chair: 5-F-05, Made a wooden chair with materials imported from the surface."; 57, '057', '57': "#057 Chair: 5-G-05, Put another plaque on the same chair, to counter the residents' complaints that all jobs are finished in one day."; 58, '058', '58': "#058 Bench: 5-H-05, Misplaced the chair. Had to make a bench."; 59, '059', '59': "#059 Poont's Lab: 5-Z-05, Built a laboratory for a new Odd resident, Poont."; 60, '060', '60': "#060 Poont's Mirror Room: 6-D-05, Had to import materials to create a mirror room for Poont's experiments."; 61, '061', '61': "#061 Poont's Experiment: 6-E-05, Created a prototype machine for Poont's studies."; 62, '062', '62': "#062 Poont's Door: 6-F-05, Constructed a magic door to meet Poont's specifications, distrustful as he was of visitors and rummer salesmen. He keeps the instructions in the communal safe despite my protests. It would be so easy for Leonine or someone to play a trick on the old coot."; 63, '063', '63': "#063 Control Room: 7-...^^Hmmm...this entry seems to have been erased. A giant stamp adorns the page: ~Protected by the Ploog Privacy Act of 3~ You can barely make out some of the erased material...it mentions a control room and ~xyz~ or something of that nature..."; 64, '064', '64': "#064 Control Room: 7-...^^Hmmm...this entry seems to have been erased. It seems to be a continuation of entry #63. You can just barely make out something about control room plush chairs."; 65, '065', '65': "#065 Control Room: 7-...^^Hmmm...this entry seems to have been erased. It seems to be a continuation of entry #63. You can just barely make out something about scenery packages."; 66, '066', '66': "#066 Control Room: 7-...^^Hmmm...this entry seems to have been erased. It seems to be a continuation of entry #63. You can just barely make out something about top secret fuzzibusters."; 67, '067', '67': "#067 Control Room: 7-...^^Hmmm...this entry seems to have been erased. It seems to be a continuation of entry #63. You can just barely make out something about a magic music press."; 68, '068', '68': "#068 Moilan's Hut: 8-F-05, Made a home near the mess hall for the new hired guard who protects the gate which protects the protected bank."; 69, '069', '69': "#069 Moilan's Fudge Box: 8-G-05, Created a granite box to house Moilan's fudge collection and to keep it from going stale."; 70, '070', '70': "#070 Porcelain Vase: 8-Z-05, Didn't actually make this but felt it deserved a code. A peddler from the surface had it for sale. Took it for granite."; 71, '071', '71': "#071 Squiggy's Tower: 1-A-06, Built a granite tower for a new Odd resident, Squiggy. Ran into a few zoning problems with Mullog."; 72, '072', '72': "#072 Squiggy's Light Trap: 1-B-06, Created a strongbox in Squiggy's tower, distrustful as he was of the bank."; 73, '073', '73': "#073 Squiggy's Door: 1-C-06, Fashioned a granite door which can only be opened from the inside. Questioned the feasibility of this but then realized that Squiggy teleports in when outside. Then wondered why he even needs a door."; 74, '074', '74': "#074 Wall Repair: 1-F-06, Found a strange featureless cube in the quarry today. Since it was just the right size, I used it to plug a hole in the pit wall."; 75, '075', '75': "#075 Poont's Bear Den: 2-B-06, Poont's pet bear needed quarters so I hollowed out a den in the side of the volcano behind Poont's lab."; 76, '076', '76': "#076 Socks: 2-I-06, Tried to make a pair of granite socks today. Discarded them because of blisters."; 77, '077', '77': "#077 Ladder Rung: 2-L-06, Yet another ladder rung broke today. Must remind Leonine to stop jumping down the ladder when he spies on the King."; 78, '078', '78': "#078 Undergarments: 3-A-06, Fashioned a pair of underpants from granite. Chaffed horribly and discarded them. Not sure about the future of granite-wear."; 79, '079', '79': "#079 Random Entry: 4-A-06, Didn't build anything today, but no one reads these entries anyways."; 80, '080', '80': "#080 Snoobar's House: 7-F-06, Constructed and painted purple for a new resident of the community, Snoobar."; 81, '081', '81': "#081 Maze of Dread: 8-A-06, Created to appease Snoobar's distrust of visitors, despite the low population of the community."; 82, '082', '82': "#082 Maze of Dread Sign: 8-B-06, Warning sign made to alert future travelers of the maze. Placed in brambles for maximum effect."; 83, '083', '83': "#083 Snoobar's Hill: 8-C-06, Continued pestering from Snoobar caused the construction of another deterrent, a magic hill which is uphill in both directions, surrounding his house. Only works for rummer salesmen."; 84, '084', '84': "#084 Snoobar's Vault: 8-D-06, Continued pestering from Snoobar led me to build a giant purple vault inside his house. Since they are pretty good friends, Snoobar gave the means to unlock the vault to Squiggy."; 85, '085', '85': "#085 Snoobar's Door: 8-E-06, I am tired of Snoobar's pestering. Built a door which can only be opened with a Doofa-certified key to guard his house."; 86, '086', '86': "#086 Snoobar's Key: 8-F-06, Built a Doofa-certified key so Snoobar could get into his house. Thank goodness he's stopped bothering me!"; 87, '087', '87': "#087 Snoobar's Window Seals: 8-G-06, Snoobar came back today because his windows didn't lock. Sealed them shut for him."; 88, '088', '88': "#088 Snoobar's: 8-Z-06, Didn't make anything today either. Just thoroughly conditioned to write ~Snoobar~. Urrrg."; 89, '089', '89': "#089 Library: 9-F-06, A joint proposal from Poont and Finney has led to the construction of a library to archive all the knowledge of the Odd Community."; 90, '090', '90': "#090 Ring Holder: 9-T-06, Found a gold ring in the quarry and made a small granite case to keep it safe in."; 91, '091', '91': "#091 Fou-llama Estate: 1-H-07, Built to house a new resident of the Nolava Community, Madame Fou-llama."; 92, '092', '92': "#092 Ball Court: 1-M-07, Constructed a Piddle-Ball court near Leonine's house, just in case anyone ever takes up Piddle-Ball. Not sure how safe the granite court is, though."; 93, '093', '93': "#093 Amoshtuff Cottage: 1-P-07, Built for Madame Fou-llama's butler, after realizing he was sleeping on the ground outside her estate."; 94, '094', '94': "#094 Accordion: 1-T-07, Tried to make a working accordion out of granite. Realized that granite isn't very compressible."; 95, '095', '95': "#095 Plaza Drums: 1-Z-07, Made a toy drum set out of granite. Realized the possibilities of ~Hard Rock~ music."; 96, '096', '96': "#096 Armadillo Decoy: 2-F-07, Felt it was time for the granite armadillos to have a kid. Put the new little one on display in South Plaza."; 97, '097', '97': "#097 Ring Display Case: 2-Q-07, Made a display case to show off my nifty gold ring. I usually wear it, but it looks spiffy in the display case. Got the message '[Your score has gone up by 5 points.]' when I put it in."; 98, '098', '98': "#098 Swimming Pool: 3-A-07, Built a twelve foot deep pool in South Plaza. Waiting for heavy rains."; 99, '099', '99': "#099 Water System: 3-B-07, Realized that the Midway Drain System would prevent flooding which might have filled up the pool. Connected the drains to the pool."; 100, '100', '100': "#100 Diving Board: 3-R-07, Built a granite diving board by the swimming pool, just in case it fills up some day."; 101, '101', '101': "#101 Opera Hall: 4-F-07, Built upon Finney's insistence of higher culture in the community."; 102, '102', '102': "#102 Opera Seats: 4-G-07, Stood through the performance of Finney's first four hundred etudes and got back cramps for my troubles. Felt seats were in order."; 103, '103', '103': "#103 Opera Stage: 4-H-07, Created a raised stage after it was determined that it's harder for listeners to throw cantaloupes up at the performer than down."; 104, '104', '104': "#104 Ear Plugs: 4-I-07, I am tired of Finney's etudes. However, granite does make for some very uncomfortable earplugs."; 105, '105', '105': "#105 Finney's Road II: 4-J-07, At Finney's insistence, I extended the paved road from his home to the Opera Hall."; 106, '106', '106': "#106 Rubble Cart: 4-L-07, Fashioned a flatbed hand cart to cope with the disaster. Currently at work cleaning up the cave-in of the Southern Plaza."; 107, '107', '107': "#107 Rubble Elevator: 4-P-07, Built a rock elevator in the castle ladder shaft. Traded disaster debris to Papoosen Rock Company for three hundred unopened bags of Camelkian Toffees. Yum!"; 108, '108', '108': "#108 Rubble Wall: 4-U-07, Realized that there was too much debris in South Plaza. Also, the Rock Company ran out of toffees. Alas, I will no longer be able to take toffees for granite. Constructed a granite wall effectively blocking off South Plaza for good."; 109, '109', '109': "#109 Quarry Supports: 5-F-07, Created supports to strengthen the quarry tunnels, to prevent the possibility of a South Plaza disaster."; 110, '110', '110': "#110 Door Cart: 8-A-07, After the decision came to seal off the Castle passage, I made a cart to transport the door to Snoobar's."; 111, '111', '111': "#111 Rock File: 8-C-07, Built a file to even out the rough edges where the door was in the Rock Wall."; 112, '112', '112': "#112 Resurfacing: 9-1-07, Resurfaced the road running from Finney's to the Opera Hall. Its average usage of 4 pedestrians per day made potholes."; 113, '113', '113': "#113 Security Maze: 9-R-07, Created as a result of Madame Fou-llama's distrust of visitors and broom peddlers. May cause problems with Code #114."; 114, '114', '114': "#114 Granite Crate: 9-S-07, Created a crate to hold the materials for Code #115. On a side note, lost my ring while working around the granite today. Must find."; 115, '115', '115': "#115 (planned) Granite Statue: Sent materials to Madame Fou-llama's before the Security Maze was activated. May make the statue some day."; 116, '116', '116': "#116 (planned) Quarry Rock Elevator: Really need to get around to fixing that elevator chain...It's just an accident waiting to happen."; default: "The entries only seem to go from 001 through 116."; } ], has scenery ! initial in Leonine's intro, prevent double descriptions firstTime; ! never opened / opened BookObj diary "butler's diary" ButlerCottage with name "diary" "book" "butler^s" "leather" "bound" "journal", initial "Sitting on the bed is a leather-bound book.", description "", article "the", before [; if (theButler in ButlerCottage) "The butler clears his throat. ~I'd appreciate it if you would leave my personal belongings alone.~"; Consult, Examine, Open, Read: give self flag; print "You skim through the diary, realizing that the butler could return at any moment."; print " Many of the entries are pretty boring, detailing the daily cleaning regimen and the best methods of cleaning granite."; print " However, it would seem that the butler has a crush on the widow; a fact revealed by the numerous hearts and initials sketched throughout the diary."; " The final entry bemoans the fact that the widow barely acknowledges his existence or returns his undying devotion."; Take: if (theButler has flag) "There's no reason to carry around the butler's diary."; "The butler would definitely notice it was missing. You could probably get away with reading it though."; ], has ~flag; ! Not read / read BookObj musBook "Finney's Dictionary" SShelves with name "book" "finney" "dictionary", description "The dictionary is quite small, as if the author never got around to completing it.", before [; Consult, Open, Read: print "You thumb through the book to find that only a few pages have entries on them...^^"; print "To The Reader: It is my humble hope that this will one day be a definitive dictionary of music, preferably with a nice big number in front,"; print " perhaps ~Finney's Book of Nine Billion, Eighty-Four Definitions of Music for the Layman~, or maybe Infinite if I can write that much, but anyhow, I digress...^^"; print "Cadence: The musical chords which outline a final resting point in a song. Personally I think cadences make music far too predictable so I usually only use one."; print " And actually, in fifteen of my thirty-seven ~Studies Only Using the Note F~ I forwent a cadence entirely!^^"; print "Embouchure: To people who play brass instruments, like the trumpet and tuba, the embouchure is the area of the lips that play into the mouthpiece."; print " People with stronger embouchures have more playing endurance and can play difficult passages with ease.^^"; print "Key: The tonal level of a piece of music. There are twelve major keys starting on each of twelve pitches between A and G. The major keys are the happy ones!"; print " There are also twelve minor keys, which start on the same pitches, for a grand total of 24 keys. Personally I like the keys of Ab minor and D major.^^"; print "Overtones: These are the natural tones that are produced at various intervals over the pitch being playing."; print " Though you can't always hear them enough to label them, they give every instrument a unique timbre.^^"; print "Transposition: This is the act of taking a piece of music written in one key and rewriting it in a different key."; print " One time, as an exercise, I transposed all four thousand of my G major sonatas to C# major. There isn't much to do down here.^^"; print "Tritone: Also known as the augmented fourth or diminished fifth. The interval of notes that is the exact one half of an octave in the standard system."; print " To the ear, its sound is easily recognizable, although one cannot tell whether the interval is an augmented fourth or a diminished fifth,"; print " since the two are the same sounding pitch. An example tritone is C to F# (augmented fourth) or C to Gb (diminished fifth), both of which sound the same."; print " I once tried to write a piece exclusively in tritones. However, I ran out of new notes in the second measure,"; " and initial reactions to the twelve minute piece were not very good."; PutOn: if (second == SShelves) <>; ], has proper; ! Call it Finney's dictionary, not a Finney's dictionary BookObj pamphlet "Timeline pamphlet" with name "pamphlet" "timeline" "history" "leaflet", description "It is a brief timeline which seems to highlight important events in the history of the Nolava Odd Community.", openStr "A BRIEF TIMELINE OF THE ILLUSTRIOUS HISTORY OF THE NOLAVA ODD COMMUNITY^by Poont^The pamphlet seems to be divided up by year, with sections for 05, 06, 07, and 08.^^(You are now in Book-Reading Mode. To read about a specific year in the pamphlet, just type in the year. To close the pamphlet, type STOP).", closeStr "You put the pamphlet away.", before [; Take: if (self notin player) { move self to player; "Taken."; } if (player in Library) <>; else "You are already carrying the pamphlet."; Taste: "The pamphlet tastes papery."; Touch: "You dog-ear one of the pages."; ], consult [w; wn = consult_from; w = NextWord(); print "You skim through the pamphlet searching for that year...^^"; switch (w) { 5, '05', '5//': "* 1/05: Leonine, our illustrious founding father has the brilliant idea to create a community of odd folk at the bottom of a dormant volcano in Papoosen.^ * 1/05: Ahtha, the illustrious builder is sent into the volcano to prepare for the coming of our grandiose community. He immediately sets to work mining the main resource - granite.^ * 1/05: Once the tunnel up to the surface has been completed, Leonine makes the journey into the underground, accompanied by his friend and fellow Oddsman, Finney, the illustrious musician.^ * 2/05: A terrible rainstorm occured, nearly flooding the fledgling community before draining measures were implemented. The first hardship successfully faced by the illustrious Oddsmen!^ * 2/05: The magnificent South Plaza was created, for all our entertainment and festive needs.^ * 3/05: The Fifth Bank of Nolava is constructed. Although it was actually the first bank, it was christened ~Fifth~ to be...well... Odd.^ * 5/05: The third Oddsman, myself, joined the Odd Community. For those laymen unfamiliar with me, I am Poont, illustrious experimenter!"; 6, '06', '6//': "* 1/06: After a long wait, the fourth Oddsman joined our illustrious community. He was Squiggy, a master of magic, much like Leonine.^ * 7/06: Snoobar, the illustrious artist, became the fifth Oddsman, and a welcome addition he was!^ * 9/06: With the backing of myself and my illustrious compatriot, Finney, this magnificent library was created."; 7, '07', '7//': "* 1/07: The sixth Oddsman, and first lady of Nolava came to join our illustrious group. She was Madame Fou-llama, a collector of fine antiques.^ * 4/07: To show our deep appreciation for the arts, we have made a fine and beautiful Opera Hall. ^ * 4/07: The second disaster struck! But our illustrious group never gave ground for an instant. The area where South Plaza once stood is naught but a massive mountain of granite rubble after a major quake shook the volcano.^ * 8/07: The decision was made to seal ourselves off from the outside world for good, because of problems with Papoosen guards and rummer salesmen. The illustrious Snoobar was given the door for safekeeping and the illustrious Finney was given the key.^ * 9/07: Poor illustrious Ahtha vanished without a trace in the quarry. After several weeks went by without word, the decision was made to seal off the Construction Office."; 8, '08', '8//': "* 1/08: Bored with his surroundings and lacking anyone to mine granite for new instruments, Finney decided to part with our company. He shall be missed...^ * 3/08: Snoobar has been locked in his purple house for five months now without word, and no one can get in to check up on the illustrious fellow. We shall hope for the best but assume the worst. He shall be missed...^ * 7/08: It would seem that Squiggy passed away yesterday. Because his tower has a door which doesn't open from the outside, he routinely teleports in. But he miscalculated somehow, and is now permanently part of the tower walls. He shall be missed...^ * 9/08: Our merry community is now down to three, and yet Madame Fou-llama has not been heard from since she erected her inescapable security maze. I worry for the future, but Leonine is quite chipper."; default: "There doesn't seem to be a section about that year. You see sections for 05, 06, 07, and 08."; } ]; BookObj poontBook "Poont's Experiment Book" PoontLab with name "book" "poont" "experiments", initial "Tucked neatly in the corner is a small book entitled ~Poont's Experiments~.", description "The book is neatly written and tabulated on lined paper.", before [; Consult, Open, Read: if (self hasnt firstTime) { give self firstTime; print "Many of the pages are filled with obscure mathematical formulas and obtuse science talk. "; } print "You turn to the last written page and read..."; font off; print "^^BEAR'S CAVE: The faux cave is complete. Soon I shall import a bear and study its eccentricities. I can also test out my diet pills which should (hopefully) allow the bear to forgo the hassle of scrounging for food.^^"; print "MIRROR CHAMBER: I have finally finished the construction of my mirror chamber. The mirror that Snoobar lent me turned out to be unneeded, and warped anyhow.^^"; print "CHAIRS: Frick and Frack both exhibit fine watchdog properties. Soon I can apply that knowledge to enchanting swords and have a better security system for my home.^^"; print "SECRET PROJECT A: The experimental prototype is proceeding smoothly. By putting a fish in the receptacle, I can alter its chemical makeup. This effectively makes it a ~fish grenade~. I must now work on lengthening the time before explosion...it is currently very short, and I may blow myself up if I am not careful.^^"; font on; "There are no more entries after this one."; ], has proper ! Call it Poont's, not a Poont's ~firstTime; ! Never been read / Been read BookObj refBook "reference book" Library with name "reference" "book" "encylopedia" "tome" "massive", initial "There is a massive tome sitting in the corner of the room.", description "The tome seems to be a reference book of some sort, with entries for various aspects of Papoosen and the Nolava Community.", openStr "You open up the massive tome.^^(You are now in Book-Reading Mode. To look up a subject, type in the subject. To turn to a random page, type in RANDOM. To close the book, type STOP).", closeStr "You close the tome.", consult [ok w1 w2 w3; wn = consult_from; w1 = NextWord(); w2 = NextWord(); w3 = NextWord(); if (w1 == 'random') { print "You flip to a random page...^^"; w1 = random(69); } else print "You thumb through the book looking for an entry...^^"; switch (consult_words) { 3: ok = self.topics(w3); if (ok == 0) ok = self.topics(w2); if (ok == 0) ok = self.topics(w1); 2: ok = self.topics(w2); if (ok == 0) ok = self.topics(w1); 1: ok = self.topics(w1); default: ok = 0; } if (ok == 0) "You don't seem to find an entry for that."; rtrue; ], topics [w; switch (w) { 1, 'ahtha', 'builder': "Ahtha the Builder 1/05:^Ahtha was hired by Leonine because of his reputation as a master stonesmith. A combination of his skill and others' magic allowed the quick construction of many structures in the Community. In his free time, the man ate Camelkian Toffees and experimented in new forms of granite shaping. Tragically, Ahtha is assumed to have perished in the quarry since nothing has been heard since then. Since Ahtha spent so much time there, the quarry was respectfully sealed off as his final resting place."; 2, 'amoshtuff', 'butler': "Butler Amoshtuff 1/07:^This dashing young fellow is the personal servant of Madame Fou-llama. He resides in a small cottage on the Fou-llama estate, maintaining her home and preparing her seemingly inexhaustible supply of tea."; 3, 'armadillo', 'armadillos': "Armadillos:^In spite of its heavy coat of armor reaching from head to end of tail, the armadillo can swim. And because it can undergo considerable exertion for six minutes without breathing, it walks submerged across the bottom of small streams and ponds. The animal is normally solitary, although several of the same sex are sometimes found in one of the four or five burrows or ledge crevices which the average animal maintains.^^The home den contains a nest made of half a bushel of dry grass and leaves, while the other burrows serve as emergency shelters. The tunnels are only 10 to 15 feet long and generally have one entrance under a stump."; 4, 'bank', 'fifth', 'trap', 'safe', 'communal': "The Fifth Bank of Nolava 3/05:^A wonder in modern architecture, this structure was built, not surprisingly, from granite. The bank houses a communal safe used by every resident of the Odd Community. This safe is protected by a devious trap! Amazingly few bank tellers have lost their lives, undoubtedly due to the fact that there never were any to begin with. This safe ended up being rarely used, since most Oddsmen found their own homes to be more secure than the bank. Poont and Leonine were both known to use the safe on occasion, although all of the first five Oddsmen had keys. By the time the widow entered the community, the bank had fallen into disuse."; 5, 'bear', 'bears', 'grizzly': "Bears:^Grizzly bear dens are usually found within the mountains, at elevations around 7300 feet. In this region, there is typically high precipitation and snowfall, and the growing season is brief. A natural chamber such as a cave or hollow tree may once in a while be used as a bear den, however, grizzlies almost always dig their own dens.^^Dens are usually dug horizontally into slopes, where the bear flings an incredible shower of rock and rubble out between its legs and down the mountainside. Each den contains a tunnel and a chamber, the chamber is larger in height and width than the tunnel. The chamber of most dens are shallow cup-shaped beds, lined with fir boughs, grass or small twigs."; 6, 'camel', 'camels': "Camels:^Camels need very little water if their regular diet contains good, moisture-rich pasture. Although camels can withstand severe dehydration, a large animal can drink as much as twenty-one gallons in ten minutes. Such an amount would kill another mammal, but the camel's unique metabolism enables the animal to store the water in its bloodstream."; 7, 'camelkian', 'toffees', 'toffee': "Camelkian Toffees:^Considered a delicacy in some parts of Papoosen, these almond toffees are actually quite repulsive in taste, and rare is the fellow who can eat more than two at a time without feeling nauseated."; 8, 'community', 'odd', 'nolava': "Nolava Odd Community 1/05:^Our community, founded by Leonine, is a wonderful enclave of truly ~odd~ folk. Created to escape the absurdities of the common people up above, the Community is both an experiment in creative granite uses and habitation of a supposedly dormant volcano.^^It should be noted that the original nom de plume of the community was ~Avalon~. But because of intellectual property disputes with the Papoosen Legend Outfit, the more fitting ~Nolava~ was chosen."; 9, 'company', 'rock': "Papoosen Rock Company:^The Papoosen Rock Company holds monopoly over all the rocks and minerals found on the surface. However, the poor construction quality of bituminous shale and river pebbles has led most of the buildings in Papoosen to be made from wood or other byproducts. Ever since the Nolava Odd Community discovered granite on their property, trading up to the Rock Company has been a lucrative trade."; 10, 'doofa', 'board', 'certification', 'certified': "Doofa and Doofa-Certified Products:^Doofa - a veritable genius of the last century. When Doofa entered the realm of commercial ventures, he saw men all around him scrambling for control and dominance in every market from clocks to toffees. Realizing he could never compete with such fierce competition, Doofa instead formed the Doofa Certification Board, a stringent one-person committee which requires ~every product ever made and everything else~ to be thoroughly inspected before distribution. His ~monopoly on monopolies~ has since earned him great wealth, and Doofa certification is a household term, even years after his death."; 11, 'duck', 'ducks': "Ducks:^Ducks are waterfowl not indigenous to the Greater Papoosen Area. Ever since the first King adopted a surname with the word ~goose~ in it, the popularity of ducks has declined remarkably. Before all the ducks were rounded up and bundled off to Jahoosa, there were two types found in the wild. The ~White Duck~ so called because it was white was often used by sport fisherman to catch various types of fish. The ~Yellow Duck~, so called because of its reddish-brown wings used to be a common sight in towns where they were trained to hunt rats."; 12, 'finney': "Finney the Musician 1/05:^Finney was the original companion of Leonine when the Nolava Community first took flight. A venerable xylophonist up above, he left Papoosen after a fledgling company gained a monopoly over all twenty-four major and minor scales, greatly limiting his musical vocabulary. Since then, Finney has done much research into the uses of granite in music and supported Ahtha's efforts at granite instruments. Sadly, Finney decided to move on when granite shipments from the quarry dried up on Ahtha's apparent demise. Finney was also known to dabble in sculpture work, but his work never reached the same artistic level as Snoobar."; 13, 'fou-llama', 'foullama', 'madame', 'security', 'maze', 'fou-llama^s', 'foullama^s': "Madame Fou-llama and the Security Maze 1/07:^Madame Fou-llama is a collector of fine antiques. She was the last Odd Community resident to move here, and her token-female-ish nature will no doubt allow this community to appeal to every gender of visitor. Leery of broom peddlers, Madame Fou-llama had a security maze constructed in front of her house which can only be passed by spelling out the owner's name without stopping in the middle. It is believed that Madame Fou-llama is still trapped in her estate, since the realization that her name can only be spelled out on the way INTO the maze. Madame Fou-llama is presumed to be alive, and resides with her butler, Mr. Amoshtuff."; 14, 'fudge': "Fudge:^A delicacy not often found in the Odd Community, but abundant on the surface."; 15, 'fuzzibuster', 'fuzzibusters': "Fuzzibuster:^A device invented by some anonymous young pre-monopoly worker many years past. It has the ability to make ordinary inexpensive materials resemble, to all outward appearances, granite. Its purposes are quite limited, although they are frequently in high demand by the Papoosen Legend Outfit."; 16, 'gf', 'g', 'f': "GF:^A great documentary maker of our time, this fellow, known only by the pseudonym, GF, has created a wide variety of documentary lectures and treatises, including the ever popular ~The Art of Getting Other People to Dig for Truffles for You~, and the timeless ~Creating Secret Compartments in Featherbed Posts~. Many of his lectures are still given by others on educational campuses throughout Papoosen. Sadly, GF passed away while researching his last work, ~How to Put Your Head Down a Moose's Throat for Fun and Profit~."; 17, 'goosen', 'king': "King Goosen:^The grandiloquent benefactor of all that is serpiphical, may he live forever and grant his unboundable wisdom upon his heirs.^^This entry seems to have been modified."; 18, 'grandunk', 'piano', 'pianos': "Grandunk Pianos:^Grandunk Pianos has been in business crafting quality keyboard for generations now. They have held a near-monopoly on all piano products, including their line of piano polish and accessories."; 19, 'granite': "Granite:^A crystalline, granular rock, consisting of quartz, feldspar, and mica, and usually of a whitish, grayish, or flesh-red color. Quite abundant in the Community, and therefore used in many aspects of daily life, ranging from toothbrushes to pillows."; 20, 'grumganer', 'system', 'grumgane', 'grumganed': "Grumganer Systems:^A new development in automatic security, these systems can turn unsuspecting trespassers into small puddles of goo. There are several varieties of the system. The most common prevents people from entering or leaving a doorway while carrying objects, to prevent theft. A novelty grumganer system has been developed which prevents relatives bearing fruit cake from crossing the threshold. Needless to say, this party trick has caused a decrease in living attendance at family reunions."; 21, 'hamster', 'hamster', 'hamsters', 'hamsters': "Hamsters:^The hamster is a small furry beast found frequently in the woodlands of Papoosen. Noted wildlife scientists warn the Papoosen royalty that the numbers of the common hamster are declining for no readily apparent reason, but one anonymous King has replied that ~it's all a load of hooey~."; 22, 'jahoosa': "Jahoosa:^Jahoosa is a small town on the outskirts of Papoosen. Recently, waves of displaced ducks have taken over this quiet little town, making most of the townspeople stay indoors. Exportation of fertilizer has increased tenfold, however."; 23, 'legend', 'outfit': "Papoosen Legend Outfit:^This outfit is a traveling performance troupe which often reenacts historical scenes in the history of Papoosen. Since the coronation of King Goosen however, its memorable series of ~Bartholomew the Daring Duck~ pantomimes have been banned."; 24, 'lenny', 'head', 'gnome': "Lenny the Head Gnome 7/05:^Hmm...this entry has been purged."; 25, 'leonine': "Leonine 1/05:^Leonine was the original Odd man and created the Community through hard work and a little magic. The self-appointed ~Wizard of Odd~, he is one of the last living members to remain and spends much of his time wandering through the community or inventing new magical spells."; 26, 'moilan': "Moilan:^A guard who was hired to patrol the northern ~elite~ section of the Odd Community. He has an affinity for chocolate products of all kinds and protects his assigned gate with a single-mindedness that anyone can admire."; 27, 'moose': "Moose:^Most of the year, moose are relatively silent animals. However, during the breeding season, the rut, their silence is broken. Moose courtship is elaborate, consisting not only of intricate vocalizations but also of elegant visual displays and subtle chemical stimuli. Still, much of the underlying mechanism of the rut has yet to be resolved, for we are just beginning to unravel the complexities of this ageless ritual."; 28, 'mullog': "Mullog:^A scrawny little fellow who predates the Odd Community. Zoning battles were originally fought when the Construction Office was first established since rocks were mined directly from Mullog's subterranean lair. A compromise was reached when Mullog agreed to allow mining in exchange for a monthly supply of Camelkian Toffees."; 29, 'neo-wonk', 'neowonk', 'wonk': "Neo-Wonk Art:^Wonk refers to the movement of finding random assortments of pebbles along the side of the road and signing them, thus making them works of art. The movement came to an end at the height of its popularity when roads disappeared overnight from the efforts of zealous artists trying to monopolize the art. The Neo-Wonk movement allows artists to include random jumbles of any object, not just pebbles. This was decided in hopes that the roads of Papoosen would not disappear again."; 30, 'office', 'construction': "Construction Office 1/05:^The office was one of the original buildings in the Odd Community; a mecca of granite creativity."; 31, 'opera', 'hall': "Opera Hall:^At the urging of Finney, the Opera Hall was built in the Odd Community. Constructed from blue glass and other materials with solid acoustical properties, the hall reached a cultural highpoint with Finney's performance of ~Finney's First Four Hundred Etudes~."; 32, 'orangutan', 'orangutans': "Orangutans:^Orangutans travel from tree to tree and will not cross to another tree until its hand is on another branch. When orangutans travel hand-over-hand, it is called brachiation. If an orangutan comes to a gap in the forest, they will either find a tree top route around it or come to the ground."; 33, 'osienthal', 'rug', 'rugs': "Osienthal Rugs:^A highly-crafted rug made from a natural mix of plant fibers, animal fur, and green thread. Many of these rugs are highly prized for their multiple uses including: hiding trapdoors, concealing dirt, and killing dust bunnies."; 34, 'papoosen', 'lower', 'suburban', 'central', 'kingdom', 'monarchy': "Papoosen:^The principal kingdom by default, since no other kingdoms have been discovered. Papoosen is run under a dictatorial monarchy in which the king gets anything he demands. All the people love and adore him.^^This entry looks to have been modified a good deal."; 35, 'piddle', 'ball': "Piddle Ball:^A sport popularized in Jahoosa which involves three pints of rum, a plush ball shaped like a watermelon, and twelve numbered wickets."; 36, 'pit', 'orchestra', 'prune': "Orchestra Pit: Starting out as an unfortunate sinkhole, the pit has now become the final resting place of most Papoosen criminals. Originally named Prune Pit, the pit was renamed after the cartographer was thrown in himself for perpetuating a bad pun."; 37, 'plague', '03': "The Plague of 03:^An outbreak of virulent disease on the outskirts of Papoosen accounted for two deaths: a farmer who became violently ill one evening, and his wife who was eaten by a bear while searching for herbs to cure her husband."; 38, 'ploog', 'fund', 'privacy', 'act': "The Ploog Fund and Privacy Act:^A special Papoosen board which underwrites several commercial ventures, including granite mining, peanut distribution, and the overseas education of indigenous fauna. Under its code, many businesses are shielded from public scrutiny through stringent nondisclosure agreements."; 39, 'poont': "Poont 5/05:^Poont became the third member of the Odd Community and spent much of his time in the lab, experimenting with new technologies and magic. He passed away in a tragic mishap with his new experimental prototype."; 40, 'propworks': "Papoosen Propworks:^The Papoosen Propworks company has full rights to any and all scenery and stage props used in many of the productions by the Papoosen Legend Outfit."; 41, 'purple', 'forever': "Purple-Forever:^This product, marketed by one of the many Papoosen monopolies, can be used in any situation where objects should remain purple. When applied to a purple surface, even magic cannot revert the colour. Surprisingly enough, this product has found a fairly limited market, as most people are still in search of a product that perpetuates the nameless colour described only as ~sick dolphin~."; 42, 'quarry', 'stone': "Stone Quarry:^The stone quarry is the Odd Community's prime resource, a seemingly bottomless store of granite, which is useful in many building situations. It was this quarry that made the building of a community in the volcano a feasible option."; 43, 'raccoon', 'raccoons','polydactyl': "Raccoons:^There have been a few sightings of polydactyl raccoons in and around the Odd Community, but confirmed sightings are negligible. As soon as one has been captured, we shall add information about it to our reference book."; 44, 'royal', 'conservatory', 'music': "Royal Conservatory:^Dedicated during the reign of the first king of Papoosen, the Conservatory is dedicated to preserving and continuing the traditions of music. The master musicians of the Conservatory mentor hundreds of students every year, most of whom go on to higher levels of musicality."; 45, 'rummer': "Rummer:^A large drinking glass. A loose conglomerate of salesmen own the selling monopoly on all rummers in Papoosen. They go to great lengths to market their product, using techniques such as kidnapping pets in exchange for rummer sales. The most recent marketing slogan for rummers is ~Rummers: They're great to drink from! Buy now, or we'll come visit your home and make you buy one.~"; 46, 'salesman', 'salesmen' : "Salesmen:^People involved in the sale or barter of various goods in Papoosen. Ever since the monopolies formed, most salesmen have been unable to find a marketable product that they are allowed to sell. They usually band together and create their own monopolies as a result."; 47, 'snoobar', 'snoobar^s', 'house', 'purple', 'vault': "Snoobar 7/06:^Snoobar was the fifth member of the Odd Community. Distrustful of salesmen of all stripes, Snoobar commissioned an ~uphill~ hill to be built around his house. People who approach with intent to sell goods find that the journey to the door and back are both uphill - usually a good half mile at a sixty degree angle to the horizontal. Snoobar's purple house showed off his love of colour and it is said that he had a magical vault inside where he stored his art and other unmentionables. It has been presumed that Snoobar is currently locked up inside his house, the security measures too stringent for him to exit. The general consensus is that he misplaced his one-of-a-kind Doofa-certified key and can no longer open the front door. In the house of Snoobar is a giant purple vault to protect his valuables. As a trusted friend, Squiggy was given the means to open the vault although it did no good once Snoobar became locked in his house."; 48, 'squiggy': "Squiggy 1/06:^The fourth member of the Odd Community, Squiggy was a master magician and lived in a tower in the elite section of the Odd Community. His tower had no doors or windows and Squiggy delighted in teleporting throughout the volcano. However, tragedy reared its frazzled head in 7/08 when Squiggy accidently teleported himself into the wall of his tower."; 49, 'squirrel', 'squirrels', 'teeth': "Squirrel Teeth:^Squirrels have upper and lower incisor teeth followed by a gap called a diastema. The diastema is where the canine teeth would normally be found in carnivorous animals such as cats or dogs, or omnivorous animals such as monkeys. Behind the diastema are the cheek or grinding teeth which consist of premolars and molars. As with other rodent species, the incisors continuously grow to compensate for the enormous amount of wear that comes from a herbivorous diet. Young squirrels have milk teeth which are replaced by permanent teeth when they are between six and twelve months old."; 50, 'stebar', 'clock', 'clocks': "Stebar Clocks:^Contrary to popular belief, the Stebar business does not make clocks. In the initial monopoly rush, old man Stebar claimed a monopoly on the creation of all clocks in Papoosen. To protect it, he rounded up all the clockmakers and had them deported. Unfortunately for old man Stebar, no one on his staff knew how to make clocks. So in the meantime, Stebar Clocks has launched a massive advertising campaign, hoping that enough interest will be generated in Papoosen while his staff learns how to make clocks, a feat which is proceeding very slowly."; 51, 'trumpet': "Trumpet:^The trumpet is a member of the brass family of instruments, in which sound is generated by buzzing lips (preferably your own) inside a mouthpiece. With the addition of three valves along the tubing, the trumpet has a wide range of pitches and is quite suitable as both a fanfaric and a balladic instrument."; 52, 'viewscope': "Viewscope:^A device created by Poont to keep tabs on various areas of the community. Some members disapproved of his spying, but he preferred to define it as ~increased awareness~."; 53, 'xyzzy': "This page seems to have been ripped out..."; 54, 'yoosa', 'jurgen': "Jurgen Yoosa:^This famed athlete has won every jumping contest ever held in Papoosen. In 01, he set the record for long jumping with a nine foot three inch distance, and in 02, he set a height record for ~jumping with a baby moose on each shoulder~. Note: Moose jumping is not recommended for the amateur athlete."; 55, 'yodelus', 'eggplant': "Yodelus Eggplant:^This noted physicist has been instrumental in many breakthroughs in modern physics. Yodelus first entered the field of science at the tender age of twelve. He tripped and fell down fourteen flights of stairs, dislocating both shoulders and experiencing the effects of gravity firsthand. Unfortunately, gravity had already been discovered, of course, since obviously the people of Papoosen were not floating in the air. Not deterred, Yodelus enrolled in school and soon his new discoveries became commonplace, sometimes two or more in the same day. He was definitely a prolific physicist, if such a thing can exist."; ! Late Additions to the reference tome 56, 'magic': "Magic:^The nature of magic is an oft-discussed and seldom understood area. Magic tends to be implemented in very different ways, depending on the caster, and usually does not provide rhyme or reason as to the logic behind any actions. This point was best explained in a book by GF entitled ~Things Work Because I Want Them To~."; 57, 'library': "Library:^The library was erected in 06 at the behest of both Finney and Poont, with the expectation that it would soon be filled with much literature. The passing years brought a single reference book and a box of Poont's pamphlets, mostly because Finney refused to share his private library of knowledge."; 58, 'volcano': "Volcano:^Dormant for many years, the volcano sits in the center of the Kingdom of Papoosen. Orchestra Pit and the stone quarry can be found under its western face, and King Goosen's castle looks over the land from the south face. Some people have questioned the curious lack of volcanic rock within the volcano, and the reasoning behind it still isn't entirely understood. One noted scholar suggested that the inside of the volcano was completely granite to aid future playwrights with productions of events within the volcano. Since igneous rock was unnecessarily expensive, he reasoned, playwrights with fuzzibusters could easily write a drama on the events in the volcano. This theory was quickly dismissed when people realized that nothing interesting ever happened in the volcano."; 59, 'goose', 'geese': "Geese:^True Geese belong to the sub family Anserinae. They are colored in blacks, whites, greys, and browns. The sexes are very similar in appearance. Most of the true geese are fairly large birds with only one molt so there is no eclipse phase as is found with ducks. True geese are mainly terrestrial in their feeding habits and have strong bills adapted for grazing. They tend to mate for life and both sexes care for the goslings."; 60, 'castle': "Papoosen Castle:^The Castle of Papoosen looks over the land from the south side of a dormant volcano. Commissioned by the first king of Papoosen, this castle has been the royal seat ever since."; 61, 'donkey', 'donkeys', 'diving': "Donkeys:^Donkeys are used to living further spread out from each other than horses in the wild, hence their amazing voices which can carry up to two miles, and of course their delightful ears which are bigger than horses' so they can more easily hear a distant neighbour. Some primitive tribes once enjoyed the art of ~donkey diving~, but unfortunately, no records have survived of their procedures or rituals."; 62, 'lemur', 'lemurs': "Lemurs:^Lemurs are lower on the evolutionary scale and are less intelligent than monkeys. Their sense of smell is more acute, but they lack binocular vision. Lemurs are docile, gregarious animals, and some species live in groups of 10 or more. Most are active at night and sleep during the day. Lemurs spend most of their time in the trees, eating fruits, leaves, buds, insects, and small birds and birds' eggs. Some species are more carnivorous than others."; 63, 'herring', 'fish', 'red', 'blue': "Red Herring:^The only known native breed of fish in the Papoosen area is the red herring. Not much is known about them, since the study of fish was once frowned upon by a former king, but they are rumored to be extremely important in scientific circles."; 64, 'pond': "Fish Pond:^Built near Finney's house, it was an attempt to elevate the social status of his fine house."; 65, 'jigsaw': "Jigsaw:^Designed by an enterprising pre-monopoly carpenter, a jigsaw consists of a long thin blade between two handle mechanisms. Pulling on the handles translates mechanical energy to the blade which vibrates up and down and allows for precision cutting."; 66, 'monopoly', 'monopolies', 'commerce': "Commerce in Papoosen:^In times past, commerce in Papoosen was a free and open market. Then one day, a wagon wheel maker realized that she would have a much better chance at profits if she were the only wagon wheel maker in the business. Rather than take the time to actually corner the wheel market and create high quality parts, she instead opted to ~register~ her monopoly with the current king. As merchants realized how easy it could be to claim a monopoly without doing any more work than before, the rush was on. People claimed monopolies on almost everything imaginable, even things which they never even planned on selling. Things peaked when Doofa created his certification board and took the monopoly on monopolies. The rush ended soon after, with one minor consequence for the people of Papoosen. Due to a miscalculation by old man Stebar, no new clocks could be made and so the passing of time went out of vogue as the older clocks stopped working."; 67, 'xylophone', 'mallets': "Xylophone:^A percussion instrument consisting of a set of graduated, tuned wooden bars supported at nodal points and struck with padded mallets."; 68, 'control', 'room': "Control Room:^Hmm...this entry has been purged."; 69, 'maze', 'dread': "Maze of Dread:^This maze separates Snoobar's house from the rest of the community. Tales have been told of people entering and never returning, although most tales are probably tall, given the lack of visitors to the community."; 70, 'catkins', 'diet': "Catkins Diet:^A weight-loss solution which involves food prepared by the brothers and sisters of a kitten, but only on alternating days."; } ]; ! ########################################################################################################## ! People ! theBear ! theButler ! theDuck ! Lenny ! Leonine ! Moilan ! Mullog ! pitGuards ! theWidow ! ########################################################################################################## NPC theBear "the bear" BearsDen with name "bear" "grizzly", initial [; print "A brown grizzly bear is here, "; if (self in BearsDen) { if (self has asleep) "asleep on the pallet."; "crouched on the pallet. It watches you suspiciously."; } if (self in MirrorRoom) { if (self has flag) "gazing at the mirrored walls."; "looking at the mirrors curiously."; } ], description [; print "Standing on its hind legs, the grizzly bear would be close to eight feet tall. It looks healthily plump and has matted brown fur."; if (self in BearsDen) { if (self has asleep) " The bear is asleep on the pallet."; " The bear is crouched on the pallet, watching you with a lazy glare."; } if (self in MirrorRoom) { if (self has flag) " The bear is gazing lovingly into a mirror."; " The bear is here, looking at the mirrors curiously."; } ], before [; Colour: "The brown bear momentarily becomes a black bear."; Eat: "That definitely isn't a good idea."; Heavy: "The bear looks as if it's gained a bit of weight."; Insert, Lift, Pull, Push, Rub, Squeeze, Take, Touch, Turn: "It's not a good idea to get too close to the bear."; Jig: "The grizzly bear is unfazed by the song. It doesn't seem to be the dancing kind of mammal."; JumpOver: "The bear is too big to jump over."; Listen: "The bear growls occasionally."; LookUnder: if (self in BearsDen) "The bear is sitting on a pallet."; Love: if (theBear in MirrorRoom && theBear hasnt flag) { give theBear flag; print "The bear suddenly becomes enamoured with its reflection in the east wall. It croons softly and ignores everything around it, including you."; if (lostRing in ButlerCottage or FrontYard or DrawingRoom || parent(lostRing) == nothing) { score = score + 1; "^^[You have earned one point for Fooling a Self-Enamoured Bear.] "; } ""; } "A pleasing suspension of major sevenths outlines this lovely melody. Nothing happens though."; Rain: "The melody echoes through the air but nothing happens. You sense that something is missing."; Smell: "The bear has a dank, wet smell."; Talk: if (self hasnt asleep) "The bear just glares at you without understanding."; "The bear is asleep, but it probably wouldn't understand you anyhow."; Taste: if (self has asleep) "You'd really prefer not to lick a sleeping bear."; "You don't want to get too close to the grizzly bear."; ], each_turn [; if (self has asleep) { ! Bear asleep if (random(100) < 20) print_ret (string) random("^The bear continues to sleep.", "^The bear makes soft noises in its sleep. "); if (random(100) < 20) { give self ~asleep; "The bear yawns and wakes up."; } rtrue; } switch (parent(self)) { BearsDen: if (random(100) < 20) { give self asleep; "^The bear curls up and falls asleep on the pallet."; } if (random(100) < 20) print_ret (string) random("^The bear shuffles around on its pallet.", "^The bear yawns.", "^The grizzly bear waits expectantly. "); MirrorRoom: if (random(100) < 20) { if (self hasnt flag) print_ret (string) random("^The grizzly sniffs at the mirrored wall.", "^The bear presses a paw up against the mirror and is surprised to see the ~other~ bear doing the same.", "^The grizzly bear waits expectantly. "); print_ret (string) random("^The bear coos at the mirrored walls.", "^The bear makes soft, happy sounds.", "^The grizzly tries to walk through the mirror. "); } } rtrue; ], life [; Ask, Answer, Order, Tell: if (self hasnt asleep) "The bear just glares at you without understanding."; "The bear is asleep, but it probably wouldn't understand you anyhow."; Attack, ThrowAt: "It's probably not a good idea to get the grizzly bear riled up."; Kiss: "You don't want to get that close to the bear."; Give, Show: if (self has asleep) "The bear takes no notice, being asleep."; if (second == herring or fishBomb) "The bear sniffs at the fish, but spurns it. Apparently it prefers the thrill of the catch, and a dead fish is too tame a meal."; "The bear looks at ", (the) noun, " without interest."; WakeOther: if (self has asleep) { give self ~asleep; "The bear rouses grumpily and glares at you."; } "The bear is quite awake at the moment."; ], orders [; Eat: if (noun == player) { deadflag = 1; "The bear, knowing a willing meal when it sees one, gladly obliges."; } ], move [i; if (self in BearsDen) { move self to MirrorRoom; if (self has asleep) { give self ~asleep; "Hearing you leave, the bear wakes up and follows you."; } "The bear follows you, out of mingled curiousity and anger."; } if (self in MirrorRoom) { move self to BearsDen; if (i == 0) "The bear follows you, out of mingled curiousity and anger. It returns to its pallet and sits, watching you intently."; else "The bear watches you exit to the south and returns to its den."; } ], has proper ! Call it the bear, not a the bear ~asleep ! Awake / Asleep neuter ! Painful, but makes bear IT not HE ~flag; ! Suspicious / In Love NPC theButler "Butler Amoshtuff" ButlerCottage with name "butler" "amoshtuff" "man" "guy", timer 0, initial [; if (self hasnt firstTime) { give self firstTime; "A man in a tuxedo looks up as you enter, and nods in cold but polite greeting. ~Good day to you. I am Mr. Amoshtuff, the butler to widow Fou-llama. It is rare that we get visitors here, since most of them realize that they can never leave.~ He motions you farther in. ~Make yourself comfortable.~"; } if (self in ButlerCottage) "Butler Amoshtuff is here."; if (self in FrontYard) "Butler Amoshtuff is here, moving purposefully."; if (self in DrawingRoom) "Butler Amoshtuff is crouched in the corner, cleaning up the potted fern."; ], description "The butler is impeccably dressed in a tuxedo which fits him to a T. His nose points slightly up in the air and he looks to be a product of his upbringing.", before [; Colour: "The butler's tuxedo flickers around the edges, but remains black and white. He must use too much starch."; Greet: "The butler returns your greeting. ~Hello.~"; Heavy: "The butler staggers slightly but manages to keep his balance. ~Kindly cease your pranks.~"; Eat, Lift, Pull, Push, Rub, Squeeze, Taste, Touch: "Butler Amoshtuff pushes you back. ~Keep your distance, please.~"; Jig: "The butler dances a happy jig until the end of the melody. Confused, he looks up. ~I can't imagine what possessed me to dance such a vulgar jig.~"; Listen: "You listen intently to the butler, but he doesn't seem to be saying much that is important."; Love: if (theButler notin DrawingRoom) "A pleasing suspension of major sevenths outlines this lovely melody. Nothing happens though."; Smell: "The butler smells like starch and soap."; Talk: "You'll have to specify what you want to say."; ], each_turn [; if (self hasnt flag && random(100) < 20) print_ret (string) random("^The butler removes an invisible speck of dust from his cummerbund.", "^The butler tidies up the cottage.", "^Butler Amoshtuff straightens up the furniture. "); rtrue; ], life [; Answer: switch (noun) { 'hello', 'hi', 'howdy': "The butler returns your greeting. ~Hello.~"; 'goodbye', 'bye', 'aloha': "The butler waves. ~Perhaps we shall meet again.~"; 'yes', 'y//': "The butler looks confused. ~What are you agreeing with?~"; 'no', 'n//': "The butler looks confused. ~What are you disagreeing with?~"; 'maybe': "The butler looks confused. ~What was the question?~"; } "~I can't help with that. Sorry.~"; Ask: if (self has flag) "~If you'll excuse me, I'm in a hurry right now.~"; self.askAbout(second); rtrue; Attack: "The butler gives you a warning look. ~Traveler, I may be snodgy in my upbringing, but that doesn't mean I didn't 'pound some tail' as a youngster. Kindly back off.~"; Give: if (self has flag) "~If you'll excuse me, I'm in a hurry right now.~"; switch (noun) { cupWater: "~No thanks. I am not thirsty, and would prefer tea in any event.~"; herring: "~Kindly remove that smelly fish from my presence.~"; } "The butler holds up his hand. ~No thank you, I do not require that.~"; Kiss: "Butler Amoshtuff pushes you back. ~Keep your distance, please.~"; Order: "The butler just sniffs and looks down the length of his nose at you."; Show: if (self has flag) "~If you'll excuse me, I'm in a hurry right now.~"; "The butler stifles a yawn. ~How fascinating.~"; Tell: if (self has flag) "~If you'll excuse me, I'm in a hurry right now.~"; if (second == 'fireplace' or 'chimney' or 'hearth' or 'shaft' or 'blockage' && BCBlockage in location) "~Yes, yes...I know about my defunct chimney. Pretty desolate, no? I wish I could build a fire.~"; "The butler listens intently, or at least, pretends to."; ThrowAt: move noun to location; if (noun == cupMud or cupWater) { remove noun; move cup to location; print "The cup spills its contents onto the ground. "; } "The butler sidesteps. ~There is no need to throw things.~"; WakeOther: "Butler Amoshtuff is awake already."; ], orders [w; if (self has flag) "~If you'll excuse me, I'm in a hurry right now.~"; Attack: "The butler frowns. ~I am not a thug for hire.~"; Climb, Enter, Search: if (noun == BCFireplace) "~That would entail me getting filthy. I think not.~"; DigRoom: "~Why should I ruin my floor?~"; Go: "~I'm just fine here, thank you. I get plenty of exercise.~"; Give: if (noun == LoveMusic) "~Not likely. That is one of my prized possessions, and I don't have many.~"; if (noun == diary) "~I will ask that you keep out of my personal diary.~"; Jump, JumpOver: "Butler Amoshtuff frowns. ~How high?~ he asks sarcastically, before going back to his business."; Listen: "The butler cocks his head to one side like a puppy. ~I don't hear anything.~"; Look: "The butler glances around."; LookDown: "The butler looks at the floor. ~Utterly fascinating.~"; LookUp: "The butler looks up at the ceiling."; Read: if (noun == diary) "~I already know what is in my diary, and it is none of your business."; if (noun == LoveMusic) "Butler Amoshtuff shrugs. ~I don't know how to read music. I just like the title.~"; Remove: if (noun == BCBlockage) "I have already tried to remove that filth. It is too high up.~"; Shout: "The butler shakes his head. ~Shouting is vulgar.~"; Smell: "The butler sniffs haughtily."; Sleep: "~I am not particularly tired at the moment, but thank you for looking out for my welfare.~"; Think: "~I do that quite often, traveler.~"; Where: wn = consult_from; w = NextWord(); switch (w) { 'amoshtuff', 'butler', 'self', 'you': "~Obviously, I am right in front of you.~"; 'ahtha', 'builder': "~I am not sure where he disappeared to, but he is long gone by now.~"; 'book', 'diary': "The butler points at his bed. ~It is right there.~"; 'community', 'nolava', 'odd', 'volcano': "~Obviously, you are standing in the middle of it.~"; 'cottage', 'red', 'blue': "~The cottages are here, on this side of the security maze."; 'fireplace', 'chimney', 'hearth', 'blockage': "~The fireplace is over there, behind you.~"; 'granite', 'parts', 'pieces', 'statue': "The butler points outside. ~I'd imagine they're still out on the front yard where Ahtha left them.~"; 'husband', 'dead': "~Passed away long ago. I'd presume he's in a crypt somewhere.~"; 'maze', 'security': "~It's south of the cottage proper. You can't miss it.~"; 'me', 'i//': "~You are right in front of me, unless my eyes are mistaken.~"; 'music', 'love': "~I keep it on my wall. The cottage looks a bit bare without it.~"; 'potted', 'pot', 'fern': "~You must mean the fern in the widow's drawing room.~"; 'widow', 'fou', 'llama', 'lady', 'fou-llama': if (theWidow notin location) "~She is probably in her drawing room, reading like always.~"; "~She's right there!~"; } "The butler shrugs. ~I don't know.~"; WhoWhat: wn = consult_from; w = NextWord(); self.askAbout(w); rtrue; default: switch (verb_word) { 'hello', 'hi', 'howdy': "The butler returns your greeting. ~Hello.~"; 'goodbye', 'bye', 'aloha': "The butler waves. ~Perhaps we shall meet again.~"; 'kill': "The butler frowns. ~I am not a thug for hire.~"; 'yes', 'y//': "The butler looks confused. ~What are you agreeing with?~"; 'no', 'n//': "The butler looks confused. ~What are you disagreeing with?~"; 'maybe': "The butler looks confused. ~What was the question?~"; } "The butler just sniffs and looks down the length of his nose at you."; ], daemon [; if (self.timer == 0) give self flag; self.timer++; switch (self.timer) { 1: move theButler to FrontYard; move BCClothes to FrontYard; if (player in ButlerCottage) { print "^The butler perks up like a dog as he hears the widow calling him in the distance."; if (DRPlant.count == 8) print " He sighs. ~I really wish you'd keep your damn hands off that fern.~"; else print " ~If you'll excuse me...~"; " He stands and exits to the east."; } if (player in FrontYard) "You hear widow Fou-llama call for the butler. At the sound of the widow's voice, the butler exits his cottage from the west."; 2: move theButler to DrawingRoom; move BCClothes to DrawingRoom; if (player in FrontYard) "^The butler enters the red cottage to the east."; if (player in DrawingRoom) "^The butler enters the cottage and begins cleaning up the mess around the potted fern."; 3: if (player in DrawingRoom) "^The butler sweeps the dirt into a pile and sets the fern upright."; 4: give DRPlant ~flag; if (player in DrawingRoom) "^The butler refills the potted fern and stands, dusting his hands off."; 5: move theButler to FrontYard; move BCClothes to FrontYard; if (player in DrawingRoom) "^The butler bows. ~All clean, widow Fou-llama.~ He exits to the west."; if (player in FrontYard) "^The butler emerges from the widow's cottage."; 6: give self ~flag; self.timer = 0; StopDaemon(self); move theButler to ButlerCottage; move BCClothes to ButlerCottage; if (player in ButlerCottage) "^The butler re-enters the cottage."; if (player in FrontYard) "^The butler enters his cottage to the west."; } rtrue; ], askAbout [w; switch (w) { 'amoshtuff', 'butler', 'self', 'himself': "The butler bows from the waist. ~Butler Amoshtuff at your service. I live here as the caretaker of the widow Fou-llama.~"; 'ahtha': "~Ahtha was the master builder of the Odd Community. He sent us some granite parts to erect a statue of the widow, but never returned to complete it.~"; 'book', 'diary': "~That book is none of your business.~"; 'community', 'nolava', 'odd', 'volcano': "The butler rolls his eyes. ~An idea for the looney if you ask me. But I just work here.~ He shrugs."; 'cottage', 'red', 'blue': "~I live in the blue cottage and the widow lives in the red cottage. Neat and symmetrical, although her cottage is a little larger than mine.~"; 'fireplace', 'chimney', 'hearth', 'blockage': "~I used to be able to make fires here until the chimney got blocked up. Now I cannot reach the obstruction to clear it.~"; 'granite', 'parts', 'pieces', 'statue': "The butler points to the front yard. ~Ahtha sent those to us in preparation for a grand statue of the widow. Too bad he never returned.~"; 'husband', 'dead': "~The widow was married at one point, but I never knew the gentleman. That was before she hired me.~"; 'maze', 'security': "~The maze was turned on a few days after Ahtha delivered his statue parts. The only problem with it is that you can't spell 'Fou-llama' from this side, so we are trapped here forever. It's not a bad life though.~"; 'me', 'i//': "The butler shrugs. ~You are a recent addition to the Nolava Community and I see that you are a musician. That is enough to satisfy my curiousity.~"; 'music', 'love': "~I do not know how long I've had that piece of music, but it has hung over my fireplace for as long as I have worked here.~"; 'potted', 'pot', 'fern': "~You must mean the fern in the widow's drawing room. There is nothing special about it.~"; 'ring', 'gold': "~I have never seen that ring before. You say it was in the statue parts? Then it must have been Ahtha's.~"; 'tea': "~Would you like some? Feel free to stick around until I prepare the widow's tea tonight.~"; 'upbringing': "The butler sniffs. ~Are you insinuating something about my upbringing? I was a very proper lad, and always obeyed my mother's wishes.~"; 'widow', 'fou', 'llama', 'fou-llama': "~The widow works me day and night, cleaning and preparing her meals, pushing me this way and that like a chess pawn. It isn't a harsh life though...I have learned to enjoy it.~ The butler nods, but you sense that he isn't telling you the full story."; } "~I can't help with that. Sorry.~"; ], has ~firstTime ! Never met / met ~flag ! Sitting around / Called by widow proper ! the butler, not a the butler ~general; ! Not in love / In love NPC theDuck "duck" with name "duck" "bird" "quacker" "goose", quackCount 0, ! Player-Duck Quack conversation pondCount 0, ! Time spent in pond initial [; if (self has asleep) "There is a small duck asleep on the ground."; if (self in FPPond) "There is a small duck is swimming in the pond."; print "There is a small duck standing here, looking "; if (self has happy) "content."; else "annoyed."; ], description [; print "It is a little white duck"; if (self in FPPond) ", swimming in the water."; " with no distinguishing features."; ], before [; Catch, Insert, Lift, Pull, Push, Squeeze, Take, Turn: if (self has asleep) { give self ~asleep; "The duck, as if somehow sensing your intentions, wakes up and flaps out of your reach."; } "The duck nimbly flaps out of your reach and gives you a chastising quack."; Colour: if (self hasnt asleep) "The duck flaps around in surprise as it suddenly takes on a greenish hue. ~Quack!~ After a few moments, the green fades back to white and the duck settles down."; Burn, Eat: if (self has asleep) "Not without a bit of duck sauce."; give self ~happy; "The duck glares at you. ~Quack!~"; Heavy: if (self in FPPond) "~Quirk?~ The duck seems to sink in the water a few inches before it regains its balance."; if (self hasnt asleep) "~Quirk?~ The duck seems to sink towards the ground a few inches before it regains its balance."; Jig: if (self hasnt asleep) "~Quacketty quack!~ The little white duck hops about to the strains of your lively gigue."; JumpOver: "The duck looks up in alarm as you jump over it and waddles a safe distance away."; Listen: "It doesn't seem to be saying much, except for the occasional quack."; LookUnder: "No eggs yet."; Love: if (self hasnt asleep) "The duck gives you an amorous glance. ~Quaaack...~"; Rub, Touch: if (self has asleep) "You pet the duck gently."; if (self has happy) "The duck cautiously allows itself to be pet."; "The duck glares at you and evades your touch. ~Quack!~"; Smell: "The duck smells rather clean, but you're not sure how a spell-wrought duck should smell."; Taste: if (self has asleep) "You'd really prefer not to lick a sleeping duck."; "You reach for the duck to taste it, but it waddles out of your reach."; ], each_turn [; if (self hasnt happy && random(100) < 20) ! Make duck happy give self happy; if (self has asleep) { ! Duck asleep if (self in VolcanoCenter && VolcanoCenter.raincount > 4) { ! Duck wakes up from RAIN give self ~asleep; "^Feeling the rain, the duck wakes up."; } if (random(100) < 20) { ! Duck wakes up give self ~asleep; "^Yawning, the duck wakes up and stretches its wings."; } if (random(100) < 50) ! Duck keeps sleeping print_ret (string) random("^The duck nestles its head in its feathers.", "^The little duck yawns in its sleep.", "^The duck continues to sleep. "); rtrue; } if (self in location && (fishBomb in player || fishBomb in location)) { ! Get away from unstable herring remove self; print "The duck hurriedly takes flight, sensing the growing instability in "; if (fishBomb in player) "your hands."; "the room."; } if (parent(self) ofclass LetterMaze && random(100) < 20) ! Duck in Letter Maze print_ret (string) random("The duck flies up to one of the floating letters but passes right through it. Ruffled, it lands again.", "^The duck peers up at the floating letter. "); switch (parent(self)) { ! Locations with special possibilities BearsDen: if (theBear in BearsDen && random(100) < 20) "The duck shies away from the grizzly bear."; ConstructOffice: if (random(100) < 20) { move self to COCounter; "^The duck flaps up to the surface of the counter."; } COCounter: if (random(100) < 20) { move self to location; "^The duck hops off the counter."; } EastHouse: if (EHSlingshot in location && random(100) < 20) print_ret (string) random("^The duck flaps into the crook of the tree, but before it can settle, it becomes alarmed as the rubber band undulates beneath itself. It quickly gets back down.", "^The duck pokes its bill cautiously at the slingshot. "); FPPond: if (herring in FPPond) { ! Duck wants herring if (herring has flag) { ! Herring is blue move herring to FishPond; print "^Spying the herring "; if (herring hasnt asleep) print "swimming"; else print "floating"; print " so close to the surface, the duck nabs it with a rapid dart of its head, flipping it through the air to land at your feet. Looking quite pleased with itself, the duck continues to float around the pond."; if (herring hasnt asleep) { ! Herring still lives give herring ~animate; give herring asleep; score = score + 2; print "^^The herring sputters and writhes for a few minutes and then dies.^^[You have gained two points for Utilizing a Duck.] "; if (Leonine in location) "^^Leonine claps his hands. ~Clever duck!~"; } ""; } if (random(100) < 50) print_ret (string) random("^The duck eyes the herring inquisitively, but can't reach deep enough to get it.", "^The duck watches the herring carefully. "); ! Herring is red } if (random(100) < 40 && self.pondCount > 2) { ! Duck stops swimming self.pondCount = 0; move self to FishPond; "^The duck climbs out of the fish pond and shakes itself dry."; } FishPond: if (random(100) < 60) { move self to FPPond; self.pondCount++; print "^Seeing the fish pond, the duck waddles up to the edge and enters."; if (self hasnt firstTime && random(100) < 15) { give self firstTime; " A duck also floats on water, so it seems."; } ""; } NorthGate: if (Moilan in NorthGate && random(100) < 20) print_ret (string) random("^The duck blinks at the gate guard.", "^The duck quacks at Moilan. "); Library: if (random(100) < 20) { move self to LShelf; "^The duck flaps up to the bookshelf."; } LShelf: if (random(100) < 20) { move self to location; "^The duck hops off the shelf."; } MessHall: if (random(100) < 20) { move self to MHTable; "^The duck flaps up to the surface of the table."; } if (random(100) < 20) "^The duck waddles underneath the table and comes out on the other side."; MHTable: if (random(100) < 20) { move self to location; "^The duck hops off the table."; } MirrorRoom: if (random(100) < 20 && theBear in BearsDen) "The duck shies away from the grizzly bear."; if (random(100) < 10) "^The duck looks in the mirror. ~Quack!~"; Overlook: if (OLBoulder in location && random(100) < 20) print_ret (string) random("^The duck sniffs cautiously at the boulder.", "^The duck looks around the valley, wondering where the boulder came from. "); PoontLab: if (random(100) < 20 && PLRubbish notin PoontLab) print_ret (string) random("^The duck almost sits in the receptacle, but is startled away by the low humming from the machine.", "^The duck eyes the contraptions. "); RockWall: if (endDoor in RWDepression && random(100) < 20) print_ret (string) random("^The duck nudges at the door with its bill.", "^Squatting down before it, the duck gazes at the door unblinkingly, head cocked to one side.", "^The duck quacks at the door. "); TowerTop: if (random(100) < 20 && TTBars in TowerTop) "The duck tries to poke its bill through the grey bars."; VaultDoor: if (location has flag && random(100) < 20) print_ret (string) random("^The duck peeks in the vault, but finds nothing of interest.", "^The duck hops onto the lip of the vault entrance and preens itself. "); VolcanoCenter: if (VolcanoCenter.raincount > 4) { ! Duck plays in RAIN give self happy; if (random(100) < 40) print_ret (string) random("^The duck doesn't seem to mind the rain. In fact, it stands on the drain grate quite happily.", "^The duck splashes about in the rain. "); } } if (random(100) < 30) { ! Rooms without special cases, but with different messages switch (parent(self)) { Bank: print_ret (string) random("^The duck starts to step on the sandstone platform, but thinks better of it and shies away.", "^The duck quacks at the portrait. "); ButlerCottage: print_ret (string) random("^With a quack, the duck pads across the hearth.", "^The duck weaves through the array of furniture. "); ConstructOffice: print_ret (string) random("^The duck wanders behind the counter and back out again.", "^Bobbing its the head, the duck peers up the rocky incline. "); DeadEnd: "^The duck peers up at the trapdoor."; EastHouse: print_ret (string) random("^The duck flies into the crook of the tree for a moment, peering about from its new perch. Evidently preferring the ground, it hops back down.", "^The duck wanders around the tree. "); FinneyHouse: print_ret (string) random("^The duck takes a cautious step towards the front doorway, but then thinks better of it and backs away.", "^The duck wanders along the paved road for a few yards, but soon loses interest. "); FPPond: self.pondCount++; print_ret (string) random("^The duck makes slow laps around the pond.", "^The small duck floats serenely across the surface of the pond.", "^The duck continues to swim in the fish pond. "); ! Duck keeps swimming FrontYard: "The duck noses through the pile of granite parts."; Library: print_ret (string) random("^The duck quacks loudly, and then hangs its head ashamedly after realizing where it is.", "^The duck pokes around the shelves quietly. "); LibraryLane: "^The duck wanders around the petite pines."; MagicLab: remove self; print_ret (string) random("^Spooked by all the magical paraphernalia, the duck takes off and disappears to the west.", "^The duck flies away with a frightened quack. "); MullogsLair: print_ret (string) random("^The duck flaps up to the mouth of the chute and observes you for a few minutes before flying back down.", "^The duck peers up the crevice. "); Maze: remove self; print_ret (string) random("^Spooked by the maze, the duck takes off and disappears down one of the tunnels.", "^The duck flies away with a frightened quack. "); MazeEntrance: "^The duck glances at the maze entrance and shivers."; OldQuarry: "^The duck wanders through the quarry."; OperaHall: print_ret (string) random("^The duck quacks, and is startled to hear its voice reverberating throughout the room. It quacks again for good measure, looking pleased with itself.", "^~Quack!~ The duck's exclamation echoes through the hall. "); Overlook: "^The duck admires the view of the valley from here."; PavedRoad: print_ret (string) random("^The duck glances around, bored.", "^The duck stifles a yawn and wonders why such a dull location as this was created. "); VaultDoor: print_ret (string) random("^The duck nudges the vault door. ~Quack!~ ", "^The duck wanders underneath mirror frame and sits. "); } } if (self notin MHTable or COCounter or LShelf or FPPond) ! Default actions self.default(); rtrue; ], life [; Answer: if (self has asleep) "The duck is asleep."; switch (noun) { 'quack', 'quirk', 'quacketty': self.quackQuip(); default: "The duck listens intently and stands tall. ~Quack!~"; } rtrue; Ask, Tell: if (self has asleep) "The duck is asleep."; switch (second) { 'quack', 'quirk', 'quacketty': self.quackQuip(); default: "The duck listens intently and stands tall. ~Quack!~"; } rtrue; Attack: if (self has asleep) "It would be dishonourable to hit a duck when it's sleeping."; give self ~happy; "~Quack!~ The duck flaps into the air and lands a few feet away."; Give: if (self has asleep) "The duck is asleep."; switch (noun) { herring: "The duck pokes at the fish, but turns it down."; mirror: "The duck looks at itself in the mirror but quickly becomes bored."; } "The duck doesn't seem interested in that."; Kiss: if (self has asleep) "You plant a big wet kiss on the duck's head. It does not respond."; "The duck edges away, giving you a worried look."; Order: if (self has asleep) "The duck is asleep."; "The duck just blinks and continues looking around."; Show: if (self has asleep) "The duck is asleep."; switch (noun) { herring: "The duck pokes at the fish, but turns it down."; mirror: "The duck looks at itself in the mirror but quickly becomes bored."; } "The duck studies ", (the) noun, " carefully. ~Quack!~"; ThrowAt: if (self has asleep) "It would be dishonourable to hit a duck when it's sleeping."; give self ~happy; move noun to location; "~Quack!~ The duck flaps into the air and lands a few feet away."; WakeOther: if (self has asleep) { give self ~asleep; "The duck blinks and stretches its wings."; } "The duck isn't sleeping."; ], default [; ! Duck Default if (random(100) < 20) { ! Duck sleeps give self asleep; "^The duck squats down on the ground and closes its eyes."; } if (random(100) < 20) { ! Duck leaves self.quackCount = 0; switch (parent(self)) { Bank, ButlerCottage, ConstructOffice, Library, MessHall, MirrorRoom, OperaHall, PoontLab, VaultDoor: remove self; "^In a cloud of dust, the duck flaps into the air and leaves the room."; DeadEnd, OldQuarry: remove self; "^In a cloud of dust, the duck flaps into the air and leaves the quarry."; InsideVault: remove self; "^Timidly, the duck approches the shimmering curtain of light. Steeling its courage, it takes off into flight, shooting through the curtain to leave the house."; default: remove self; "^In a cloud of dust, the duck flaps into the air and disappears from view."; } } print_ret (string) random("^The duck waddles about, exploring its surroundings.", "^The duck sniffs at your feet.", "^With a quack, the duck looks up, blinking.", "^~Quack!~ ", "^The duck wanders in circles around you. "); ], quackQuip [; ! Talk to Duck self.quackCount++; switch (self.quackCount) { 1: "The duck perks up. ~Quack!~"; 2: "~Quack, quack quack?~"; 3: "The duck bobs its head. ~Quack.~"; 4: "~Quack...quack quirk quack!~"; 5: "The duck looks peeved. ~Quacketty quack!~"; 6: "The duck just blinks."; 7: "The duck nods furiously. ~Quack quack quack quirk!~"; 8: if (random(100) < 10) ! Duck recites poetry?! "~But as some muskets so contrive it^As oft to miss the mark they drive at,^And though well aimed at duck or plover,^Bear wide, and kick their owners over!~^The duck stops short and blinks. ~Quack!"; "~Quack quack quirk quack quirk!~"; 9: "The small duck looks confused. You have an odd premonition that it would be drawing leaves on white bark if it had any berries and a stick."; default: "The duck looks confused. ~Quack!~"; } ], has ~firstTime ! Never been in pond / Been in pond happy ! Happy / annoyed ~asleep ! Awake / Asleep neuter; ! Painful, but makes duck IT not HE NPC Lenny "Lenny the Head Gnome" ControlRoom with name "Lenny" "Gnome" "Head", description [count; print "^Next to you, "; if (count > 4) print "Lenny the Head Gnome "; else print "a tall gnome, who looks to be in charge, "; print "shouts orders into the organized chaos, occasionally "; print (string) random("approving NPCs which are brought before him", "stopping to make notes in his black binder", "inspecting packages", "berating lazy gnomes", "making sure the props are lifelike"); ".^"; ], visitQuip [count; switch (count) { 0: "The head gnome turns impatiently. ~D'you put that music in the volcano yet, Larry?~ He blinks. ~Yer not Larry...Hey! How'd you get here?~ Obviously displeased, the head gnome sets his black binder down and frowns. ~This here's a restricted area, pal! I don't know how you figgered out the magic word, but you'll hafta get gone!~"; 1: "~You again??~ The head gnome frowns. ~Listen here, wise acre, if you don't stop sayin' the magic word I'll get ole' Larry to wrap some o' that prop tape around yer stinkin' mouth! Now get outta here!~"; 2: print "The head gnome looks up at the ceiling and waves his hands futilely before giving you the evil eye. ~Look here, buster, you should consider it a privilege to play this game! I got a hundred wanna be 'adventurers' on the waitin' list to get into a game like this, and I can just as easily give you the "; style bold; print "*** You have died ***"; style roman; " banner and pick the next entrant, you hear me? Now stop pokin' yer nose where it don't belong!~"; 3: "Cued by a slight breeze at your entry, the head gnome looks up from the granite chunk he was inspecting. He sighs and looks up at the ceiling again. ~That's right, give poor Lenny the Head Gnome an adventurer with a cantaloupe for a brain. Why couldn't I have gotten a good game like that one at the church where Malcolm's missin'? 'Least that main character behaves herself...~ He glares at you. ~Scram.~"; 4: "Lenny the Head Gnome speaks over his shoulder as he helps a gnome courier seal up a drum of pit mud. ~That better not be who I think it is...~ He turns and pokes you in the stomach. ~Beat it, buster. You bother me...~"; 5: "~Lemme guess...it's you again.~ Lenny spins around to confront you and groans when he sees you for the sixth time. ~Look, pal, I got a job to do here. Why do ya keep interfering? What, do ya just like to see me get angry in a new way on each visit? Beat it!~ His last words are almost a growl."; 6: "~That you, Lionel? Listen, I told you we shoulda made the pit a few screens shorter. No one's gonna believe that someone could survive being dropped down a sixty foot pit, even with mud at the bottom. Now in the waterfall puzzle I think we should...~ He trails off as he turns around to see you. ~Grrr...get out of here buster! Go home and tell yer mother she wants ye...~"; 7: "Lenny sighs. ~If you keep on sayin' the magic word, I'll make your parser interpret everything as RESTART. You want that to happen? Then GET LOST!!~"; 8: "Lenny doesn't even bother to turn around anymore. ~Stop breaking the mimesis.~"; 9: "Grumbling something about getting 'xyzzy' banned from the parser, Lenny shakes his head in disgust."; } ], has proper; NPC Leonine "Leonine" ConstructOffice with name "man" "leonine" "wizard" "leo" "leon" "magician" "robe" "black", trying 0, introCount 0, askCount 0, askTimer 0, fudgeCount 0, helloCount 0, initial [; if (self hasnt firstTime) { StartDaemon(self); give self firstTime; print "Sitting atop the counter is a bound book entitled ~Nolava Odd Community Building Codes~.^^"; print "A tall bearded man in a black robe stalks into the room. Peering through the dust, he identifies you as the culprit. ~Well I'll be!"; print " That wall from the pit must have finally broken down... we haven't had a visitor down here in years!~"; print " He rushes up to you, nearly bowling you over in the process, and shakes your hand furiously."; print " ~I am Leonine, the magician, and this is my home! Well actually, this is the Construction Office, but this little community is my home!"; print " I moved down into this volcano when I became fed up with King Goosen up above. And if you got tossed in the pit...well, sniveling snails,"; print " you must be on my side of the bed! Are you odd?~^^Leonine waits for a moment but continues on before you can answer."; print " ~This is the Nolava Odd Community and every permanent resident is a little odd, so if you're planning on sticking around,"; print " I'd suggest that you pick up some kind of idiosyncrasy, unless you just want to be mildly ill-tempered, which is just fine in my book as well."; print " Of course, you won't have much company, since most of the residents are dead or moved away.~"; } print_ret (string) random("Leonine is standing here.", "Leonine is nearby, enjoying the scenery.", "Leonine is here, singing off-key.", "Leonine is here, dusting off his robe.", "Leonine is standing here, thinking to himself.", "Leonine is here, mumbling in another language.", "You can see Leonine here.", "Leonine is here in his black robe. "); ], description "Leonine is a tall bearded man in a long black robe. His attire makes him look more like a monk than a mage, but the crazy eyes and the gentle, yet odd, disposition put him in a league of his own. He stands nearby, watching you and enjoying the scenery.", before [; Colour: "You play a melody brimming with runs and arpeggios. Leonine's cloak shifts from black to mauve and back. He snickers. ~Fun!~"; Eat, Taste: "Leonine just doesn't look appetizing."; Greet: if (random(100) < 10) "Leonine waves at you. ~Hello, sailor!~"; "Leonine waves at you. ~Hello, neighbour!~"; Heavy: "Leonine sinks a few inches. ~Whee!~ He snaps his fingers, and for a moment, you are sure that he turned into an elephant. Before you can be positive, it's the same old Leonine again."; Jig: if (boxKey in Leonine) { move boxKey to location; print "~Wahoo!~ Leonine jumps in the air and does a merry jig. In the midst of a set of dance steps that would put any Papoosen ballerina to shame,"; " a small key flies out of his pocket and lands near your feet. Leonine continues to dance for several more minutes before finally getting tired. ~Witherin' witches, that was fun!~"; } "Leonine does a little dance and hums along to your playing."; Lift: "You try to lift him off the ground, but he's heavier than he looks. In response, he snaps his fingers and levitates a few inches off the ground before landing."; Listen: "You listen intently to Leonine."; Love: "A pleasing suspension of major sevenths outlines this lovely melody. Leonine whips out a handkerchief and sobs melodramatically. ~Preposterous pandas, that was a beautiful rendition!~"; Pull, Push: "Leonine crosses his arms and wills himself to stand still. You cannot move him despite your best efforts."; Rub, Squeeze, Touch: "~Aww, I love you too, neighbour.~"; Smell: "He smells like the static discharge of magic."; Talk: "You'll have to specify what you want to say."; ], life [; if (self hasnt general) "Leonine ignores you, evidently overjoyed to have someone to finally listen to him."; Answer: switch (noun) { 'hello', 'hi', 'howdy': if (self.helloCount == 1) { self.helloCount--; "Leonine smiles."; } if (random(100) < 10) "Leonine waves at you. ~Hello, sailor!~"; "Leonine waves at you. ~Hello, neighbour!~"; 'goodbye', 'bye', 'aloha': "Leonine waves goodbye."; 'yes', 'y//': "~How positive you are!~ Leonine chuckles."; 'no', 'n//': "~Denial won't get you anywhere.~ Leonine nods sagely."; 'maybe': "~Be adventuresome. Make a decision!~"; } "Leonine shakes his head. ~Can't help you there, neighbour.~"; Ask: self.askAbout(second); rtrue; Attack: "It's been your observation that people who attack magicians usually end up dead or enchanted."; Give: switch (noun) { boxKey: move boxKey to Leonine; "~Why that's my safe key! Thanks for finding it, neighbour.~ Leonine snatches the key and puts it back in his pocket."; herring: "~I didn't ask for a herring! You must have be confused with someone else.~"; RainMusic: "Leonine shakes his head. ~Nah, you can keep it for a while longer, neighbour. Just let me borrow some butter tomorrow when I make cookies!~"; } "~Such a generous neighbour! Thanks, but no.~"; Kiss: "Leonine coyly evades your kiss. ~We've only just met today!~"; Order: "Leonine shakes his head. ~Can't help you there, neighbour.~"; Show: switch (noun) { boxKey: move boxKey to Leonine; "~Why that's my safe key! Thanks for finding it neighbour.~ Leonine snatches the key and puts it back in his pocket."; doorKey: "~Duplicitous ducks! That's the key to the door that leads back up to the surface.~ Leonine grins. ~You're well on your way.~"; herring: "Leonine grins. ~Herr Herring here!~"; lostRing: "Leonine dances around you. ~I know where that ring came from!~"; mirror: "Leonine breaths on the mirror and writes his name in the fog. ~That's Snoobar's mirror.~"; trumpet: "~Having fun with it yet?~"; RainMusic: "~Good music, isn't it?~"; } "Leonine looks positively bored by your display."; Tell: switch (second) { 'me', 'music', 'goosen', 'king', 'pit', 'orchestra': "You tell Leonine about your troubles on the surface.^^~Sniveling snodgrass!~ The magician frowns and slaps his knee. ~That old King doesn't know his arse from a hole in the ground!~"; default: "Leonine nods his head absently. ~That's nice. Very nice indeed.~"; } ThrowAt: move noun to location; if (noun == cupMud or cupWater) { remove noun; move cup to location; print "The cup spills its contents onto the ground. "; } "Leonine jumps into the air and giggles. ~Fun!~ Your projectile misses him by a mile."; WakeOther: "Leonine is wide awake."; ], orders [w; if (self hasnt general) "Leonine ignores you, evidently overjoyed to have someone to finally listen to him."; Attack: "~Perturbing pantaloons! Do I look like your personal bodyguard, neighbour? I'm sure you can do that on your own.~"; Climb: if (location == EastHouse && noun == EHSlingshot or EHTree) "Leonine climbs up the tree, but hops down when it creaks alarmingly under his weight."; DigRoom: "~Whatever do I need a hole for?~"; Eat: "~Nah... I'm on the Catkins diet!~"; Enter: switch (location) { EastHouse: if (noun == EHWindow) "~Why use the window? Just go to the door.~ He chuckles."; FinneyHouse: if (noun == FHDoor) "~There's nothing in there for me anymore... Old Finney moved away long ago.~"; LeonineHouse: if (noun == LHHouse) { if (random(100) < 50) "~I spend too much time cooped up in there. I think I'll stay out here for now.~"; self.goto(MagicLab); "~Okay!~ Leonine wanders into his house."; } LibraryLane: if (noun == LLDoor or LLBuilding) "~It's boring in there!~"; MazeEntrance: if (noun == MECave) "~No sir, not on your life! I'm not gonna get lost in there again.~"; NorthGate: if (noun == NGBuilding) { self.goto(MessHall); "~Okay!~ Leonine skips into the Mess Hall."; } if (noun == NGHut) "~That's not my house.~"; if (noun == NGGate) "~Nah... I already know what's up north.~"; OutCourt: if (noun == OCBuilding) { self.goto(OperaHall); "~Okay!~ Leonine skips into the Opera Hall."; } if (noun == OCArch) "Leonine chuckles. ~No thanks! I'll stay out here.~"; VolcanoCenter: if (noun == VCBuilding) { self.goto(ConstructOffice); "~Okay!~ Leonine ambles into the Construction Office."; } } Give: if (noun == RainMusic) { self.askRainy(); rtrue; } Go: "~I don't feel like going anywhere right now. But you can come along next time I do!~"; Jump: "Leonine jumps in place. ~Whee!~"; JumpOver: if (location == FishPond && noun == FPPond) "Leonine clears the fish pond in a single bound. ~Take that, Yoosa!~"; Listen: "Leonine perks his ears. ~I hear it, I hear it!!~"; Look: "Leonine poses sternly. ~Now, look here!~ He sniggers."; LookUp: "Leonine looks up into the air."; LookDown: "Leonine studies the ground with the air of a scientist."; Read: "~Bah, book-readin'! Who needs such a waste of time? Experience is where it's at!~"; Shout: "Leonine belts out a roar like a lion. ~How was that?~"; Smell: "The magician sniffs the air. ~Nothing here!~"; Sleep: move self to Void; "~Good idea! I'm going to catch a few minutes of shut-eye.~ Leonine disappears with a snap."; Think: "Leonine thinks hard. ~Hmm.~"; Where: wn = consult_from; w = NextWord(); switch (w) { 'ahtha', 'builder': "~He's still in the quarry as far as I know. Probably living the good life and eatin' granite!~"; 'amoshtuff', 'butler': "~Butler Amoshtuff still lives with the widow...that's gotta be a dull life.~"; 'bank', 'fifth': "~The bank is on the north side of the community, beyond the gate.~"; 'community', 'odd', 'nolava', 'volcano': "~You're in it, neighbour! Ain't it great?~"; 'door', 'ladder', 'spire': "~The rock spire to the surface? Oh, that's south of my house, near the fish pond.~"; 'finney': "~Ah, my good friend Finney... I haven't seen him in ages! He left for the surface, but I stopped worrying about surface affairs long ago!~"; 'fou-llama', 'foullama', 'madame': "~She lives to the northeast beyond her Security Maze.~"; 'fudge': "~You can't find much fudge down here. I bet that if you search hard enough you can find some.~"; 'granite': "~Granite? Why it's lying all over the place down here!~"; 'leonine', 'self': "~I'm right here, neighbour."; 'library': "~The library is across from my house, just up the road.~"; 'magic', 'lab': "~My magic lab is south of the library. Just follow the road from the Construction Office!~"; 'maze', 'dread', 'security': "~There's two mazes in the Odd Community... one is outside of Madame Fou-llama's estate and the other is on the way to Snoobar's house.~"; 'me', 'i//': "~You're right here!~"; 'moilan': if (location ~= NorthGate) "~Probably still at his post by North Gate.~"; if (Moilan in location) "~He's right there, silly!~"; "~He's probably inside still.~"; 'mullog': "~Mullog lives underneath Squiggy's tower. Likes the dark, or so he says.~"; 'office', 'construction', 'quarry', 'stone': "~The quarry and the construction office are in the center of the community. You can't miss it!~"; 'opera', 'hall': "~It's over by Madame Fou-llama's house.~"; 'papoosen': "~Papoosen is the land directly above us, but then you knew that, didn't you?~"; 'pit', 'orchestra', 'prune': "~Orchestra Pit is up on the surface, but I guess the wall between here and there collapsed, or else you wouldn't be here, now would you?~"; 'pond', 'fish': "~Quaint, isn't it? It's near Finney's house.~"; 'poont': "~Poont used to live up near Squiggy. Just go past North Gate.~"; 'ring', 'lost': "Leonine grins. ~Find out about the ring yourself. It'll build character!~"; 'snoobar': "~Snoobar owns the purple house to the southeast.~ His voice drops down to a whisper. ~You must pass the Maze of Dread!~"; 'squiggy': "~Squiggy's tower is up near the bank.~"; } "Leonine shrugs. ~Sorry, neighbour, I can't help ya there!~"; WhoWhat: wn = consult_from; w = NextWord(); self.askAbout(w); rtrue; default: switch (verb_word) { 'hello', 'hi', 'howdy': if (self.helloCount == 1) { self.helloCount--; "Leonine smiles."; } if (random(100) < 5) "Leonine waves at you. ~Hello, sailor!~"; "Leonine waves at you. ~Hello, neighbour!~"; 'goodbye', 'bye', 'aloha': "Leonine waves goodbye."; 'give', 'make': wn = consult_from; w = NextWord(); if (w == 'fudge' or 'brownie') { self.fudgeCount++; if (self.fudgeCount < 4) "~Fudge? Nah, not today. I've made enough fudge!~"; "~I don't want to make any fudge! Stop botherin' me, neighbour.~"; } if (w == 'banana' or 'bananas') "~Yodeling Yoosa! I only have enough bananas for myself! I know we're neighbours and all, but try and find your own fruit stash.~"; if (w == 'safe' or 'key') "~Now just how safe would a safe be if I gave away the key?~ He sniggers."; 'kill': "~Perturbing pantaloons! Do I look like your personal bodyguard, neighbour? I'm sure you can do that on your own.~"; 'no', 'n//': "~Denial won't get you anywhere.~ Leonine nods sagely."; 'yes', 'y//': "~How positive you are!~ Leonine chuckles."; 'maybe': "~Be adventuresome. Make a decision!~"; } "Leonine hums the tune from ~I Am My Own Man~ and continues about his business."; ], daemon [; if (self.askTimer ~= 0) self.askTimer--; if (self hasnt general) { ! Introduction sequence self.introCount++; switch (self.introCount) { 2: "^Leonine looks you over critically. ~Now if you're going to live here, you'll need to clean up those clothes...~ Leonine, in a deep and resonant voice, speaks the word ~Fresh!~^^When nothing immediately happens, he slaps his forehead. ~That one removes dirt from produce...~ He tries again. ~Clean Clothes!~^^The mud on your clothes disappears and you feel refreshed."; 3: give trumpet flag; "^Next, Leonine takes a look at the trumpet and sniggers. ~If you're going to play a musical instrument, you should have a better instrument than that!~ Before you can protest that you like your trumpet, the magician mumbles something under his breath.^^Thankfully, your trumpet remains intact, but the bell now glows with magic. ~Heh heh, you'll have fun playing that trumpet now, neighbour!~"; 4: "^Leonine gives you the once-over and frowns. ~You don't seem to be very happy to be a new member of the Nolava Odd Community... You don't really want to go back up to the surface do you?~ Leonine thinks about this. ~Damn foolery if you ask me, but to each his own I guess. Well, if you really want to get out, there's a ladder to the surface inside a rock spire near the old South Plaza. I can't recall what we did with the door though...or the key for that matter.~ Leonine brightens. ~You could go check at the library! There should be records...but stay awhile and be an acquaintance, hey?~"; 5: move Leonine to Void; give self general; "^Leonine suddenly jumps two feet in the air, a feat made disturbing by the fact that he lands on your toes. ~Leapin' lemurs! I left an experiment on the stove. Come on over for tea sometime, new neighbour!~ With a snap of his fingers, Leonine vanishes."; } } else if (parent(self) == Void) { if (player notin MagicLab) move self to MagicLab; } else { if (random(100) < 10 && self hasnt flag) self.removeSelf(); else if (random(100) < 20 && self hasnt flag) self.movement(); else if (self in location) self.actions(); } rtrue; ], actions [; if (theDuck in location && Leonine in location && random(100) < 20) print_ret (string) random("^Leonine pets the duck.", "^Leonine ruffles the duck's feathers. "); switch (parent(self)) { ! Locations with special possibilities EastHouse: if (EHSlingshot in location && random(100) < 20) print_ret (string) random("^Leonine twangs the rubber band.", "^Leonine tries to sit in the slingshot, but is unsuccessful. "); FishPond: if (random(100) < 20) print_ret (string) random("^Leonine dabbles his toes in the pond.", "^Leonine flicks water at you from the pond. "); NorthGate: if (Moilan notin NorthGate && random(100) < 20) "^Leonine pounds on the stone hut, evoking grumbling from inside."; VolcanoCenter: if (VolcanoCenter.raincount > 4 && random(100) < 20) print_ret (string) random("^Leonine splashes through the rain happily.", "^Leonine sticks out his tongue and catches raindrops. "); } if (random(100) < 30) { ! Rooms without special cases, but with different messages switch (parent(self)) { ConstructOffice: print_ret (string) random("^Leonine thumbs through the calendar.", "^Leonine climbs to the top of the incline and rolls back down again.", "^Leonine peers outside. "); EastHouse: print_ret (string) random("Leonine sticks his head in the Y-shaped crook and makes odd faces at you.", "^Leonine pokes around the house, looking for a clove of garlic. "); FinneyHouse: "^Leonine mutters something about a grumganer."; NorthGate: if (Moilan in NorthGate) "^Leonine gives Moilan a bit of fudge, which is gobbled up quickly. ~Mmm...~"; Library: print_ret (string) random("^Leonine wanders between the shelves.", "^Leonine peers up at the skylights and mumbles something about cleaning solutions. "); LibraryLane: print_ret (string) random("^Leonine tweaks a plastic pine tree.", "^Leonine sits in the road and admires the library. "); MagicLab: print_ret (string) random("^Leonine observes the motion of the lights with the practiced eye of a master magician.", "^Leonine stares at the pyramid for several minutes without blinking.", "^Leonine knocks on the wooden head and giggles. "); MazeEntrance: "^Leonine peers into the maze and sniggers."; MessHall: print_ret (string) random("^Leonine crawls under the table and pantomimes a duck before crawling out.", "^Leonine conjures up a peeled banana and eats it whole. "); OldQuarry: print_ret (string) random("^Leonine hides behind a pillar and pretends to stalk you.", "^Leonine kicks up a cloud of dust. "); OperaHall: print_ret (string) random("^Leonine bangs on the xylophone without talent.", "^Leonine hops up on stage and performs a soliloquy in some other language. "); RockWall: print_ret (string) random("^Leonine picks through the granite rubble.", "^Leonine sits in the clearing. "); } } if (random(100) < 30) ! Default actions print_ret (string) random("^Leonine whistles through a space between his teeth.", "^Leonine points at the ground and says ~Don't Move!~ The spell seems to have worked.", "^Leonine mutters some words under his breath but nothing happens.", "^Leonine mumbles a word that begins with an ~F~ but then slaps his head and realizes that it isn't a magic word.", "^The magician scratches his head.", "^The magician adjusts his robe and clears his sinuses.", "^The magician looks at you and smiles.", "^Leonine examines his surroundings. "); rtrue; ], askAbout [w; if (self.askTimer ~= 0) "Leonine waves you away. ~Stop pesterin' me with your questions! A man's got to have a bit of thinking time every now and again.~"; self.AskCount++; if (self.AskCount == 9) { self.AskCount = 0; self.askTimer = 3; } switch (w) { 'ahtha', 'builder': "~I recruited him to help build the Nolava Community! The man was amazing with granite, although I can't say that I enjoyed his granite underwear. He went into the Quarry a few years ago and hasn't been heard from since.~"; 'amoshtuff', 'butler': "~Ah, that's the butler of Madame Fou-llama. I never get to talk to her anymore since she put up that Security Maze.~"; 'avalon': "Leonine frowns. ~That was gonna be the name of my community, but it was already taken!~"; 'banana', 'peeled': "~Very good for the body! I have at least one every meal.~"; 'bank', 'fifth': "~Every community must have a bank! I even have an account there... actually it's a group account since there's only one safe.~"; 'community', 'odd', 'nolava', 'volcano': "~Don't you love it? I should found communities more often!~"; 'devices': "~Oh, I have all sorts of devices.~ He scratches his head. ~I sure wish I could remember what they did...~"; 'door': if (location == MagicLab) "~My quarters are protected by a door that rolls up when someone besides me gets too close. Quite a doozy, ain't it?~"; if (location == RockWall) { if (endDoor in RWDepression) "Leonine points at the marble depression. ~See? I knew you could find it, smart neighbour!~"; "Leonine points at the marble depression. ~That's where the door to the surface went.~"; } "~There used to be a ladder up to the surface between my house and Finney's house at the rock spire. After we closed it off, though, we removed the door and gave the key to Finney. Can't remember why...~"; 'duck', 'ducks', 'ode': "~Quack!~ Leonine looks at you. ~How was that for an impersonation?~"; 'finney', 'finney^s', 'house', 'woodwork', 'musician': "~Ah, my good friend Finney... he left when the community started dying... I wish he'd come back! He was a great musician and also dabbled in a little woodwork.~"; 'fou-llama', 'foullama', 'madame': "~She lives to the northeast beyond her Security Maze. Pretty leery of broom peddlers if you ask me, which you did.~ Leonine chuckles."; 'fudge': "~You can't find much fudge down here. Luckily I can conjure it, but I don't want to right now.~"; 'gate', 'north', 'private', 'elite', 'quarter': if (location == NorthGate) "~We're here!~"; "~North gate separates the elite quarter from the rest of the community. You can find it to the north, obviously.~ He points and chuckles."; 'goosen', 'king': "Leonine smacks the back of his hand. ~What an inept sockwad! He doesn't know the first thing about running a country, much less putting on his own clothes. He's the reason I moved down here in the first place.~"; 'granite': "Leonine sings a childrens' ditty. ~Granite granite granite granite everywhere. There's granite on the sofa and there's granite on the chair. There's granite on the table and there's granite on the floor. And there's some new rocks coming through the door! More?~"; 'grumganer', 'system', 'grumgane', 'grumganed': "Leonine chuckles. ~Just don't bring anything into Finney's house.~"; 'hamster', 'hamsters': "~Hamsters are such cute lil' creatures. Too bad they're all nearin' the verge of extinction.~ Leonine sighs. ~There aren't many left around here anymore.~"; 'head', 'wooden', 'leonine^s': "~Isn't my wooden head handsome? Wise too!~"; 'ladder', 'surface', 'spire', 'marble', 'depression': if (location == RockWall) { if (endDoor in RWDepression) "Leonine points at the marble depression. ~See? I knew you could find it, smart neighbour!~"; "Leonine points at the marble depression. ~That's where the door to the surface went.~"; } "~There used to be a ladder up to the surface between my house and Finney's house at the rock spire. After we closed it off, though, we removed the door and gave the key to Finney. Can't remember why...~"; 'lenny', 'head', 'gnome': "~Lenny and I are old friends! I mean,...er, who?~"; 'leonine', 'wizard', 'founder', 'magician', 'self', 'himself': "Leonine snaps his fingers and his name appears across his chest. ~That's me!~"; 'library': "~That is our community's contribution to higher learning! It's up the road from my house.~"; 'lights', 'balls': "~That's a very delicate experiment. It's best if you leave it be!~"; 'key', 'safe': "Leonine's brow wrinkles. ~Oh, you must mean the communal safe at the bank! I used to have an account there so I probably have the last key in existence!~"; 'magic', 'lab': "~Don't stay in my magic lab too long, you might go insane... I know I haven't.~"; 'manual', 'building', 'codes': "~Yup, Ahtha was an organized coot. He kept a written record of all the projects he undertook in the Odd Community and kept it in his office.~"; 'maze', 'dread', 'security', 'fou-llama^s', 'foullama^s': "~There's two mazes in the Odd Community... one is outside of Madame Fou-llama's estate and the other is on the way to Snoobar's house.~"; 'me', 'i//': "~You're my bestest neighbour, neighbour!~"; 'moilan': "Leonine drops down to a low whisper. ~Kind of a clod if you ask me. But then again, we're all a little odd here.~"; 'monkey', 'monkeys': "Leonine looks around. ~Monkeys? I don't see any monkeys!~"; 'mullog': "~Technically, he's the first resident of the Odd Community... but he's antisocial (even moreso than the rest of us) so he doesn't count.~"; 'music', 'songs', 'trumpet': "~There's some nice sheet music around the community. Finney was one heck of a musician when he lived here! You could probably play some if it on that trumpet of yours, 'cept it might be too hard without practice.~ He winks."; 'office', 'construction', 'quarry', 'stone': "~That's where we get all the granite!~"; 'opera', 'hall': "~Harping hyenas, there's some great acoustics in there. It's over by Madame Fou-llama's house.~"; 'papoosen': "~What a waste of cartographers' ink!~"; 'piddle', 'ball': "~Piddle Ball is loads of fun! Too bad the court was buried under that earthquake a while back.~"; 'pit', 'orchestra', 'prune': "~That's where King Goosen throws all his convicts. You're the first one who wasn't eaten by the mud creatures!~"; 'plaza', 'south', 'earthquake': "~Sadly, the South Plaza and my piddle ball court were buried under an earthquake.~"; 'pond', 'fish': "~Quaint, isn't it? Finney always liked its serenity.~"; 'poont', 'experiment', 'experiments': "~Poont used to live up near Squiggy. Poor fellow blew himself up a while back. It was an experiment gone awry!~ Leonine nods. ~There's a phrase you can throw into every conversation!~"; 'private', 'quarters', 'moving': "~My quarters are protected by a door that rolls up when someone besides me gets too close. Quite a doozy, ain't it?~"; 'pyramid', 'model': "Leonine puts his fingers to his lips. ~Shh! That's my secret device to take over the world!~ He winks conspiratorially."; 'rain', 'music', 'scroll', 'rainy', 'day': self.askRainy(); rtrue; 'reference', 'tome', 'book': "~That old book in the library? We started that when the community was first formed. Everything something interesting crossed our mind, we'd add to the book!~"; 'ring', 'lost': "Leonine grins. ~Find out about the ring yourself. It'll build character!~"; 'snoobar', 'snoobar^s', 'house': "~Snoobar owns the purple house to the southeast. I haven't heard from him in ages...I bet he's still in his house somewhere.~"; 'squiggy': "Leonine tries to refrain from chuckling. ~He's the reason why I don't teleport. Frivolous fishheads, he reappeared inside a wall and died! Truth be told though, he was always kind of a bore anyhow!~"; 'trumpet': "~Just my own little dash of magic.~ Leonine grins."; 'vault': "Leonine nods. ~Yep, old Snoobar had himself a big vault built in his house.~ He gets distracted and mumbles something about hamsters."; 'xyzzy': "Leonine claps his hand over your mouth before you can finish the word. ~Shh!~"; } "Leonine shakes his head. ~Can't help you there, neighbour.~"; ], askRainy [; if (RainMusic hasnt general) "~Eh? Whatcha talkin' about, boy?~ He scratches his head."; if (RainMusic has flag) { if (RainMusic hasnt firstTime) "~Titillating toadstools! I already said ye' could have it!~ He grumbles and mutters something unintelligible."; "~Having fun with my music? You done any noble works of community service with it yet?~ He chuckles and hums the tune to ~Rainy Day~."; } give RainMusic flag; "Leonine listens intently. ~So ye be wantin' my Rainy Day music then, eh? Hmmm...~ He absently braids his beard as he thinks. ~Well, I guess I could be givin' it to ya if you do a weensy little favour. Go run up to the southwest end o' the Community and check if my old friend Finney is home yet. If he is, get him to return my plastic pine shears! Dawdling doghairs, he's only had 'em fer two years now.~ He pauses.^^~Now if I know Finney, he'll be wantin' you to get somethin' from summun else too...bah...~ Leonine waves his hands. ~Too cliched... You jus' go ahead and take my music, I don't mind.~"; ], goto [dest; move self to dest; ], movement [chosen count dir exit loc zr; loc = parent(self); objectloop(dir in Compass) { exit = loc.(dir.door_dir); if (ValidExit(exit)) count++; } if (count == 0) rtrue; chosen = random(count); count = 0; objectloop(dir in Compass) { exit = loc.(dir.door_dir); if (ValidExit(exit)) { count++; if (count == chosen) { zr = ZRegion(exit); self.moveSelf(dir, exit, loc, zr); rtrue; } } } ], moveSelf [dir exit loc zr; if (zr == 2) { self.trying = 1; exit = RunRoutines(loc, (dir.door_dir)); self.trying = 0; if (exit == 0 or 1) rfalse; } if (zr == 0 || exit == 0) rfalse; if (self in location) { if (self.helloCount == 1) self.helloCount--; print "^Leonine "; self.moveVerb(); if (self in ConstructOffice && dir == u_obj or w_obj) print " up the rocky incline.^"; else if (self in OldQuarry && dir == d_obj or e_obj) print " down the rocky incline.^"; else if ((self in VolcanoCenter && dir == w_obj) || (self in LibraryLane && dir == sw_obj) || (self in LeonineHouse && dir == e_obj) || (self in OutCourt && dir == e_obj)) dir = in_obj; else if (dir == out_obj) print " outside.^"; else if (dir ~= in_obj) { print " away to the "; DirectionName(dir); print ".^"; } } if (dir == in_obj && self in location) { self.goto(exit); print " into "; switch (parent(self)) { ConstructOffice: print "the Construction Office"; Library: print "the Library"; MagicLab: print "his house"; MessHall: print "the Mess Hall"; OperaHall: print "the Opera Hall"; } print ".^"; } else { self.goto(exit); if (self in location) { print "^Leonine "; self.moveVerb(); if (location == OperaHall or MessHall or MagicLab or Library or ConstructOffice) print " in.^"; else print " up to you.^"; if (self.helloCount == 0) { self.helloCount = 1; print_ret (string) random("^~Hello, neighbour!~ ", "^~Howdy there, neighbour!~ ", "^~It's my friend and neighbour!~ "); } } } rtrue; ], moveVerb [; print (string) random("wanders", "ambles", "hops", "bounds", "bounces", "strolls", "prances", "dances", "serenades", "skips", "jumps", "walks", "goose-steps", "bolts", "runs"); ], removeSelf [; if (self in location) { if (random(100) < 20) { print "^Leonine screams and points over your shoulder. ~Look behind you! "; print (string) random("A multi-headed marmoset", "A two-eyed monkey", "A dual-headed orangutan", "A despicably normal-looking gorilla with hairy ears", "A three-headed monkey", "A polydactyl raccoon"); print "!~ You turn around, but see nothing, and Leonine takes the opportunity to disappear from view.^"; } else print (string) random("^With a snap of his fingers, Leonine vanishes.^", "^Exhaling deeply, Leonine implodes.^", "^Leonine flickers out of existence.^", "^Waving his hands in the air, Leonine disappears.^", "^Leonine bounds into the air and winks away without a trace.^"); } move self to Void; rtrue; ], has proper ! Leonine, not a Leonine ~general ! Introduction / During the Game ~firstTime ! Suspended animation / Daemone started ~flag; ! Wandering around / Standing still in Rock Wall NPC Moilan "Moilan" NorthGate with name "moilan" "guard" "bearded" "beard" "man", initial [; if (self has firstTime) print "Moilan "; else print "A helmeted guard with a spear "; print "is here, standing at attention by the gate."; if (self hasnt firstTime) { give self firstTime; " The guard tips his helmet to you. ~G'day traveler! Hurr, I be Moilan, and I'm in charge o' this gate before ya.~"; } ""; ], description "Moilan is about five and a half feet tall with a thick black beard. He stands at attention by the massive gate with his standard issue helmet and spear.", before [; Bribe: "Moilan rejects your offers. ~Corrupt, I'm not! Hurr, you be takin' your bribery elsewhere!~"; Colour: "You play a melody brimming with runs and arpeggios. The world around you seems a little brighter but nothing else happens."; Eat, Taste: "The guard just doesn't look appetizing."; Greet: "~G'day to you, traveler!~"; Heavy: "Moilan staggers for a moment. ~I musta eaten too much fudge this past week. Hurr!~"; Lift: "You try to lift him off the ground, but he's heavier than he looks. ~Hurr! Lookit those scrawny arms, traveler! Ye best be exercisin' more!~ Moilan grins and flexes his bicep."; Pull, Push, Rub, Squeeze, Touch: "~Cease yer ministrations, traveler!~"; Jig: "~Hurr! That thar's a catchy tune.~ The guard sets down his spear and dances along to the music. When the song ends, he sighs and resumes his post, spear in hand."; Listen: "Moilan has a strong accent, identifying him as a native of Jahoosa."; Love: "A pleasing suspension of major sevenths outlines this lovely melody. Nothing happens though. ~Aww, it sure is pretty, hurr!~ Moilan smiles."; Smell: "He smells like chocolate."; Talk: "You'll have to specify what you want to say."; ], each_turn [; if (random(100) < 20) print_ret (string) random("^Moilan hums an old folk tune.", "^The guard adjusts his helmet and straightens out his uniform.", "^Moilan taps the end of his spear to test its sharpness. "); rtrue; ], life [; Answer: switch (noun) { 'hello', 'hi', 'howdy': "~G'day to you, traveler!~"; 'goodbye', 'bye', 'aloha': "Moilan taps his helmet at your departure."; 'yes', 'y//': "~Yes? Hurr, what do ye mean by that?~"; 'no', 'n//': "~No? Hurr, what do ye mean by that?~"; 'maybe': "~Maybe? Hurr, what do ye mean by that?~"; } "Moilan shrugs. ~I don't know aboot that, so it must not be too important.~"; Ask: self.askAbout(second); rtrue; Attack: "That's probably not a good idea. Moilan looks competent with that spear."; Give: switch (noun) { cup: "~That be moi' cup. But I've got another, if ye'd like to have a spot o' spirits in that. Keep it for awhile!~"; cupWater: "~No thank'ee, traveler. I'm not a bit parched right now.~"; cupMud: remove self; remove cupMud; move cup to location; move NGSick to location; remove Moilan; remove NGSpear; remove NGHelmet; score = score + 2; if (self hasnt general) { give self general; print "Moilan's eyes bug out. ~Oooh! That thar looks like some creamy rich fudge!~ "; } print "He greedily accepts the cup from you and downs it in two successive gulps. Smacking his lips, the guard's expression suddenly contorts. ~Hurr hurr, it never tasted like that before!~ Further conversation is cut short as he throws down the cup and runs to his hut, retching. The door slams shut behind him but you can hear a groan of sickness from inside.^^[You have earned two points for Creative Recipes.] "; if (Leonine in location) "^^Leonine claps his hands. ~Good trick! He'll be fine tomorrow though.~"; ""; lostRing: "Moilan pushes the ring away. ~That is too expensive a gift for ye to be giving, burr burr!~"; } "~Hurr! I don't think I'll be needin' that. Best keep it for a rainy day, traveler.~"; Kiss: "~Go find yerself a lass, ya lonely, pathetic traveler!~ Moilan chuckles."; Order: "Moilan dismisses your words. ~Stop speakin' yer bloody nonsense here. Bourr!~"; Show: switch (noun) { blackPiece: "Moilan studies the puzzle piece. ~That thar is part of a puzzle! Ye'd best find the other pieces...they're probably layin' aboot.~"; boxKey: "~Obviously it's a key, ya loon!~ Moilan scoffs at your ignorance."; cup, cupWater: "~That be moi' cup. But I've got another, if ye'd like to have a spot o' spirits in that. Keep it for awhile!~"; cupMud: if (self hasnt general) { give self general; "Moilan's eyes bug out. ~Oooh! That thar looks like some creamy rich fudge!~"; } "Moilan nods. ~Hurr! I love fudge...~ He looks at you, hoping you'll get the hint."; lostRing: "The guard whistles through his teeth. ~That be a moighty fine piece o' jewelry you've got there, traveler! Keep it safe and maybe you can sell it.~"; rubber: "Moilan pulls one end of the rubber and snickers as it snaps you on the wrist."; whitePiece: "Moilan studies the puzzle piece. ~That thar is part of a puzzle! Ye'd best find the other pieces...they're probably layin' aboot.~"; } "Moilan tries to hide a yawn behind his hand."; Tell: "Moilan cuts you off. ~Hurr, thar be nothin' important down here that I don't already know about, traveler, and iff'in I don't know it, it must not be important. I be super smart!~"; ThrowAt: move noun to location; if (noun == cupMud or cupWater) { remove noun; move cup to location; print "The cup spills its contents onto the ground. "; } "Moilan easily evades the missile. ~Hurr, your aim be fair to middlin' thar!~"; WakeOther: "Moilan is wide awake at his post."; ], orders [w; Attack: "~Hurr! I'm not your personal basher, traveler. Do your own dirty work. Hurr!~"; Climb: if (noun == NGGate or NGWall) "~Bourr... imagine me climbin' over the walls like a common footpad!~"; Close: if (noun == NGGate) "~It is closed, churlio!~"; DigRoom: "~Too hard to dig around here, what with the granite and all. Hurr!~"; Enter: if (noun == NGGate) "~No thank ye...I've been there enough times. Just more o' the same.~"; if (noun == NGHut) "~I'm still on duty! Hurr...I'll go inside later.~"; Give: if (noun == NGSpear or NGHelmet) "~Not on yer bloody life, ya mad hatter! That's part o' moi' uniform and ye best be leavin' yer hands offa it!~"; Go: "Moilan frowns and shakes his head. ~I shan't be leavin' moi' post! I'm supposed to stand here and keep people outta the north side.~"; Jump: "~Hurr...you aren't my boss!~"; Listen: "The guard puts his hand up to his ear. ~Oi' hear nothing at all!~"; Look: "~Err...wot am I supposed to look at?~"; LookDown: "Moilan looks down at the ground."; LookUp: "Moilan looks up. ~Nothing there that isn't normally there...bourr!~"; Open: if (noun == NGGate) "~Not today! You aren't gettin' through on moi' watch.~"; Shout: "Moilan shouts, echoing through the volcano. ~How was that?~"; Smell: if (cupMud in player or location) "Moilan sniffs the air."; "Moilan sniffs the air. ~Nope...thar be no fudge around here.~"; Sleep: "~Hurr...sleeping on duty is not wot a good guard does!~"; Think: "~Oi' think quite often, traveler!~"; Where: wn = consult_from; w = NextWord(); switch (w) { 'ahtha', 'builder': "~Ahtha disappeared in the quarry a while back.~"; 'bank', 'fifth': "~Yep, I know where the bank is. It's on the other side of this gate. Hurr!~"; 'butler', 'amoshtuff', 'widow', 'fou-llama', 'foullama': "~The widow and her butler live on their estate to the northeast.~"; 'community', 'odd', 'nolava', 'volcano': "Moilan chuckles. ~You're in the volcano, churlio!~"; 'cup': if (cup in player or location || cupMud in player or location) "~Moi' cup's right there!~"; if (cup in MHTable) "~Moi' cup's in the Mess Hall.~"; "~I don't know where my cup is right now...~"; 'finney': "~Old Finney left for the surface a long time ago. I haven't seen him down here since. Hurr!~"; 'chocolate', 'fudge', 'brownie': if (MHFudge in MHTable) "~I brought a brownie for lunch today! It's in the mess hall. Mmm...fudge.~"; "~No more fudge today.~ Moilan looks a little sad."; 'gate', 'north', 'helmet', 'spear', 'hut', 'stone', 'moilan', 'self', 'me', 'i': "~Right here, churlio!~"; 'granite': "~Hurr...there's granite all over down here. Boring scenery, if you ask moi' opinion.~"; 'jahoosa': "~Ahh Jahoosa... it's a long way from here... but I could take you there if we were up on the surface.~"; 'leonine': if (Leonine in location) "~Right over there, churlio!~"; "~He's probably wanderin' around somewhere on the south side. Just open your eyes.~"; 'maze', 'courtyard', 'security': "Moilan inclines his head to the east. ~The security maze is over east of here.~"; 'me', 'i//': "~Hurr, you be roight here!~"; 'office', 'construction', 'quarry', 'stone': "~Just head south from here...you can't miss it!~"; 'opera', 'hall': "~Walk east from the center of the community...you can't miss it!~"; 'papoosen': "~Papoosen is up above us. I think I'll go back someday. Bourr!~"; 'poont', 'squiggy': "Hurr...he's dead! Long time now.~"; 'raccoon', 'raccoons', 'polydactyl': "~I bet they're hidin' in the quarry, waiting to trip unsuspecting innocents!~"; 'salesmen', 'salesman', 'peddler', 'broom', 'peddlers', 'rummer': "~Nope, oi' haven't seen any down here.~"; 'snoobar': "~He lives off to the southeast. I haven't heard from him since he locked himself in his house.~"; } WhoWhat: wn = consult_from; w = NextWord(); self.askAbout(w); rtrue; default: switch (verb_word) { 'hello', 'hi', 'howdy': "~G'day to you, traveler!~"; 'kill': "~Hurr! I'm not your personal basher, traveler. Do your own dirty work. Hurr!~"; 'goodbye', 'bye', 'aloha': "Moilan taps his helmet at your departure."; 'yes', 'y//': "~Yes? Hurr, what do ye mean by that?~"; 'no', 'n//': "~No? Hurr, what do ye mean by that?~"; 'maybe': "~Maybe? Hurr, what do ye mean by that?~"; } "Moilan dismisses your words. ~Stop speakin' yer bloody nonsense here. Bourr!~"; ], askAbout [w; switch (w) { 'ahtha', 'builder': "~Ahtha was a good friend o' mine. The only problem was that 'e never took my advice to fix oop the elevator in the quarry. Then one day he's going aboot his business and he's never heard from again. I bet it's that elevator that did him in, burr!~"; 'bank', 'fifth': "~The bank is beyond this here gate, traveler. It's my job to guard it, and ye aren't gonna get through on moi' watch. Rules are rules.~"; 'bear', 'bears', 'grizzly': "~Poont 'ad a bear once. Not sure what ever became of it.~"; 'butler', 'amoshtuff', 'widow', 'fou-llama', 'foullama': "Moilan nods. ~Oi' know Widow Fou-llama, but I never see her around. She and the butler live down 'ere to the east.~"; 'camelkian', 'toffees': "~Don't particularly care for them moiself. Me, I prefer home-baked fudge! Hurr!~"; 'community', 'odd', 'nolava': "~You be standin' in it, ya loon!~"; 'cup', 'spirits': "~That be moi' cup. But I've got another, if ye'd like to have a spot o' spirits in that. Keep it for awhile!~"; 'finney': "~Finney was a boring old feller. Always playin' some song that never ended.~ Moilan chuckles. ~Good thing fer me guard post, or I woulda had to go to the concerts!~"; 'fudge', 'brownie': "~Ahh, fudge! It be moi favourite treat...although it gets harder to find down in this 'ere volcano.~"; 'gate', 'north': "~This 'ere be moi post! I can't let you in the gate without an invitation from Squiggy or Poont.~ Moilan chuckles. ~Pretty 'ard considering they're dead.~"; 'granite', 'volcano': "Moilan waves his spear. ~It be all around you, traveler!~"; 'helmet', 'spear', 'uniform': "Moilan models his uniform. ~Oi got the 'elmet and the spear when they hired me.~"; 'hut', 'stone': "~It's not much, but I call it 'ome. Burr!~"; 'jahoosa': "~Jahoosa is where I'm from. I'll go 'ome fer a visit some day, if there's every a way back oop to the surface.~"; 'lenny', 'head', 'gnome': "Moilan shifts from foot to foot. ~Oi'm not supposed to be speakin' aboot that.~"; 'leonine', 'magician', 'wizard': "~Hurr, Leonine is a funny old man... he's the only one I ever see down here anymore. Sometimes he brings me food!~"; 'maze', 'courtyard', 'security': "Moilan points somewhere to the east. ~Widow Fou-llama had that courtyard put up to keep trespassers out. ~Hurr! I ain't setting foot in there...too many moose.~"; 'me', 'i//': "~Hurr, you seem like a noice enough soul.~"; 'moilan', 'self', 'himself': "Moilan hits his chest with a fist. ~That be me! Moilan at yer service.~"; 'moose': "~Hurr! Hush about the moose, you!~"; 'office', 'construction', 'quarry', 'stone': "~It's to the south, just past the mess hall.~"; 'opera', 'hall': "~Burr... too high class fer a man like me!~"; 'papoosen': "~Hurr, it be the kingdom up topside. Pretty place, except fer that loon of a king.~"; 'poont': "~Poont lived past this gate. Blew up though.~ Moilan tries not to laugh. ~Sad indeed, but kinda funny. Hurr!~"; 'raccoon', 'raccoons', 'polydactyl': "~Sometimes I see a raccoon runnin' into the quarry, but oi' never give chase. Raccoons can be dangerous lil' creatures.~"; 'salesmen', 'salesman', 'peddler', 'broom', 'peddlers', 'rummer': "Moilan thinks back, and shakes his head. ~No...I never saw any salesmen down 'ere. Topside was a different story, hurr!~"; 'snoobar': "~I never met Snoobar too often... he lived in the valley beyond the maze. Oi' don't like mazes too much.~"; 'squiggy': "Moilan nods. ~Squiggy lived up in this end o' Nolava. 'e teleported into a wall one day, and we never heard aboot him since then.~"; } "Moilan shrugs. ~I don't know aboot that, so it must not be too important.~"; ], has ~firstTime ! Never met / met ~general ! Unaware of mud / Aware of mud proper; ! Moilan, not a Moilan NPC Mullog "Mullog" MullogsLair with name "man" "little" "mullog" "hunchback" "dirty" "petite" "hunchbacked", initial [; if (self hasnt firstTime) { give self firstTime; print "Over by the stairway, a dirty little man looks up as you enter. ~Mullog sees ring? No, he doesn't. No, he doesn't.~ He squints a bit and studies you. ~Mullog sees traveler who "; if (ML2Rocks in location) print "dropped big rocks in Mullog's pretty home and "; "tried to flood Mullog's pretty home with rain and blew up Mullog's wall. Not fun for Mullog, no.~"; } if (self has flag) "Mullog is crouched in the corner fawning over a gold ring."; "Mullog is pacing back and forth near the stairway, mumbling to himself."; ], description [; print "Mullog is a petite hunchbacked man who resembles a cross between an elf and a muscle-bound lemur. Years of living underground have lent him an albino appearance, although it is offset by several layers of accumulated dust and dirt. "; if (self has flag) "He is crouched in the corner fawning over a gold ring."; "He paces back and forth near the stairway, mumbling to himself."; ], before [; Colour: "You play a melody brimming with runs and arpeggios. The world around you seems a little brighter but nothing else happens."; Eat: "Mullog really doesn't look very appetizing."; Greet: "~Mullog sees traveler. Yes he does. Hello traveler.~"; Heavy: "The threnody seems to weigh upon your soul, but no physical effects can be seen."; Lift: "~Mullog at good altitude. No raising for him, no.~"; Pull, Push, Rub, Squeeze, Touch: "~Don't touch Mullog. No, you mustn't.~ Mullog nods."; Jig: "Mullog performs a little dance, a cross between a hop and a skip. The impetus of the dance carries him around the cave and back to the stairs."; JumpOver: "He is short, but not quite that short."; Listen: "Mullog seems to be mumbling something about a ring."; Love: "A pleasing suspension of major sevenths outlines this lovely melody. Nothing happens though."; Smell: "He smells of musty toffees and granite dust."; Talk: "You'll have to specify what you want to say."; Taste: "That's not the most appealing thing to do right now."; ], each_turn [; if (random(100) < 20) { if (self has flag) ! Mullog has the ring. print_ret (string) random("^Mullog shines his ring happily.", "^Mullog spins the ring on his finger. ~Mullog happy. Yes he is.~ ", "^Mullog admires his ring and sighs contentedly. "); if (self has general && self hasnt flag) ! Mullog knows about ring. print_ret (string) random("^Mullog eyes you greedily and mumbles something about the gold ring.", "Mullog frowns impatiently. ~Mullog wants his gold ring. Yes he does.~ "); if (self hasnt general && self hasnt flag) ! Mullog is clueless about ring. print_ret (string) random("^Mullog produces a toffee from somewhere on his person and scarfs it down.", "^Mullog watches you from his perch by the stairs.", "^Mullog makes furrows in the dust at his feet. "); } rtrue; ], life [; Answer: switch (noun) { 'hello', 'hi', 'howdy': "~Mullog sees traveler. Yes he does.~"; 'goodbye', 'bye', 'aloha': "~Mullog staying here. That's what he'll do. Bye bye.~"; 'yes', 'y//': "~Yes, yes.~"; 'no', 'n//': "~Of course not. No, says Mullog to traveler, no.~ Mullog shakes his head."; 'maybe': "~Maybe Mullog will turn into a pumpkin. Maybe.~"; } "Mullog just shrugs."; Ask: self.askAbout(second); rtrue; Attack: "Even though you're bigger than he is, you're not sure you could best him in a fight. You are just a trumpeter, after all."; Give: switch (noun) { cup, cupWater, cupMud: "~Mullog doesn't want a cup. Mullog has no lemons to make lemonade.~"; doorKey: "~Mullog doesn't like silver, no he doesn't. Mullog has gold!~"; endDoor: "~Door? Mullog could put door in yawning crevice, yes yes. But Mullog has no hinges. No door for Mullog.~"; lostRing: if (self hasnt flag) { give self flag; move lostRing to location; give lostRing scenery; give lostRing static; score = score + 1; if (self hasnt general) { give self general; print "Mullog looks at the ring with wide eyes. ~Mullog spies something gold! It is his ring, yes it is!~"; } else print "Mullog claps at your offering."; " Gleefully, he accepts the ring and slips it on his finger.^^[Your score has gone up by one point for Stomaching the Requisite Cliched Fantasy Reference.] "; } mirror: "Mullog traces out his reflection on the mirror. ~Shiny, but not mine, no, not mine.~"; } "Mullog doesn't seem interested in that."; Kiss: "Mullog edges away from you. ~Mullog not that kind of guy. No, he isn't.~"; Order: "~Mullog won't do that. No, he won't. No, he won't.~"; Show: switch (noun) { cup, cupWater, cupMud: "~Mullog doesn't want a cup. Mullog has no lemons to make lemonade.~"; doorKey: "~Mullog doesn't like silver, no he doesn't. Mullog has gold!~"; endDoor: "~Door? Mullog could put door in yawning crevice, yes yes. But Mullog has no hinges. No door for Mullog.~"; lostRing: if (self hasnt flag) { if (self hasnt general) { give self general; "Mullog looks at the ring with wide eyes. ~Mullog spies something gold! It is his ring, yes it is!~"; } "Mullog nods impatiently. ~Yes yes, that is Mullog's ring! Mullog wants his ring, yes he does!~"; } mirror: "Mullog traces out his reflection on the mirror. ~Shiny, but not mine, no, not mine.~"; } "Mullog peers at ", (the) noun, " and shakes his head. ~Not what I want. Not what I want.~"; Tell: switch (second) { 'ahtha': "You tell Mullog about Ahtha's untimely death in the quarry. He seems visibly happier about the news."; 'ring', 'gold': if (self has flag) "Mullog seems happy to know that Ahtha lost the ring after taking it away from the cave. ~Mullog likes ring away from Ahtha. Good to be in statue parts, but better to be on Mullog!~"; if (self has general) "~The gold ring belongs to Mullog! Yes it does!~"; if (lostRing in player) <>; "You are not sure what to tell him."; 'rock', 'pile', 'rocks': if (ML2Rocks in location) "Mullog glares at you. ~Not very nice of traveler. Mullog will drop rocks in your chimney someday.~"; "Mullog scratches his head and shrugs."; } "Mullog doesn't seem at all interested."; ThrowAt: move noun to location; if (noun == cupWater or cupMud) { remove noun; move cup to location; print "The cup spills its contents onto the ground. "; } "Mullog scurries out of the way."; WakeOther: "Mullog is not sleeping."; ], orders [w; Attack: "~Mullog is not feeling aggressive right now.~"; Climb, Enter: if (noun == TTStairs) "~No no.~ Mullog shakes his head pitifully. ~Mullog not allowed upstairs."; if (noun == ML2Hole) "~Too bright. Mullog prefer the dark.~"; DigRoom: "~Mullog has no need for holes, no.~"; Go: if (noun == e_obj) "~Too bright. Mullog prefer the dark.~"; if (noun == u_obj) "~No no.~ Mullog shakes his head pitifully. ~Mullog not allowed upstairs."; Give: if (noun == lostRing && self has flag) "~No! Mullog's ring is Mullog's ring now!~"; Jump: "Mullog performs a miniscule hop. ~Mullog jumped.~"; Listen: "~Too quiet. Too quiet. Mullog not wanting to listen now.~"; Look: "~Mullog sees a traveler.~"; LookDown: "~Mullog sees the ground. Not interesting, no.~"; LookUp: "~Mullog sees nothing Mullog wants. Mullog cannot fly.~"; Shout: "~Mullog doesn't shout, no. Mullog prefers to talk at a conversational level.~"; Smell: "Mullog sniffs the air expectantly."; Sleep: "Mullog shakes his head. ~Mullog not tired now.~"; Where: if (self hasnt flag) "~Mullog doesn't know where anything is. Especially Mullog's ring!~"; "~Mullog doesn't know where anything is. But Mullog's ring is here!~"; WhoWhat: wn = consult_from; w = NextWord(); self.askAbout(w); rtrue; default: switch (verb_word) { 'hello', 'hi', 'howdy': "~Mullog sees traveler. Yes he does.~"; 'goodbye', 'bye', 'aloha': "~Mullog staying here. That's what he'll do. Bye bye.~"; 'yes', 'y//': "~Yes, yes.~"; 'no', 'n//': "~Of course not. No, says Mullog to traveler, no.~ Mullog shakes his head."; 'maybe': "~Maybe Mullog will turn into a pumpkin. Maybe.~"; } "~Mullog won't do that. No, he won't. No, he won't.~"; ], askAbout [w; switch (w) { 'ahtha': print "Mullog scowls at the mention of Ahtha. ~Mullog does not like Ahtha. Ahtha took rocks from Mullog's cave. Now Mullog's cave too big for Mullog. Then Ahtha stole Mullog's ring!~"; if (self has flag) " Mullog brightens. ~But Mullog has ring back now!~"; ""; 'armadillo', 'armadillos': "~No armadillos here. Not today. Armadillos don't live in volcanos.~"; 'camelkian', 'toffees', 'toffee': "~Mmm, toffees... Mullog likes only Camelkian Toffees, not the other inferior brands. High in vitamins and Brown Dye #2.~"; 'community', 'odd', 'nolava', 'volcano': "Mullog points at the crevice. ~Up there, they live. But Mullog was here first! Yes, he was.~"; 'crevice', 'hole': "Mullog points at the yawning crevice. ~No good, no good. Too bright for Mullog.~"; 'granite': "~Mullog finds granite to be more comfortable a bed than quartz or feldspar.~"; 'me', 'i//': "~Mullog finds you intrusive. Yes.~"; 'mullog', 'self', 'himself': "~Mullog is here.~ The little man nods. ~Mullog lives in this hole. But someone made a crevice to the surface. That is not good for Mullog, no. Now Mullog has company."; 'pit', 'orchestra': "~Mullog doesn't like the pit, no. Sometimes it floods and Mullog gets wet.~"; 'quarry', 'stone', 'chute': "~Mullog was here first!~ Mullog stamps his foot. ~Mullog does not like the quarry which Ahtha built close by. Ahtha takes Mullog's granite. Sometimes Ahtha drops rocks down chute to piss Mullog off.~"; 'raccoon', 'raccoons': "~Mullog used to keep raccoon as a pet... no good no good. It bit Mullog and ran away. Bad raccoon.~"; 'rain', 'flood', 'septic', 'system': "~Mullog had a hard time with flood. Mullog thankful for septic system.~"; 'ring', 'gold': if (self has flag) "Mullog points at the ring on his finger. ~Pretty. Very pretty.~"; if (self has general) "~The gold ring belongs to Mullog! Yes it does!~"; "Mullog grimaces. ~Mullog had pretty gold ring. But now it is lost, lost. Ahtha found it in quarry one day and stole it. Bad Ahtha!~"; 'rock', 'pile', 'rocks': if (ML2Rocks in location) "Mullog frowns. ~Bad traveler dropped rocks in hole in quarry. Now Mullog has more rocks for neighbours.~"; "Mullog scratches his head and shrugs."; 'squiggy', 'tower': "Mullog turns and points at the stairs. ~Squiggy lives up there. Mullog keeps basement clean in exchange for toffees.~"; } print_ret (string) random("Mullog just shrugs.", "Mullog looks at you cluelessly.", "Mullog scratches his head and shrugs. "); ], has ~firstTime ! Never met / met ~flag ! No ring / has ring ~general ! Unaware of ring / aware of ring proper; ! Mullog, not a Mullog NPC pitGuards "Jim and Rob" FallingPit with name "guard" "guards" "jim" "rob" "hook" "nose" "hooked", randomCount 0, ! Random quips description [; if (turns == 2) "One of the guards stands at the mouth of Orchestra Pit."; print "The two guards stand at the mouth of Orchestra Pit, "; if (player in FallingPit) "watching you as you fall."; print_ret (string) random("watching you intently.", "making jokes at your expense. "); ], before [; Bribe: "The hook-nosed guard frowns. ~Even if ye had any money, which you don't since we took it all, it's not proper to bribe us!~"; Greet: "Your greeting doesn't make it to the top of the pit, so you wave instead. The hook-nosed guard waves back. ~Hello!~"; Listen: if (player in FallingPit) "You strain your ears over the rushing wind to hear the guards."; "You strain you ears to hear the guards high above you."; Smell: "You can't smell them from here, but they smelled of soured grapes when you were near them."; Take: "You can't reach them from here."; Talk: "You'll have to specify what you want to say."; Touch: "You can't seem to reach the guards from here."; ], life [; Answer: "One of the guards leans over the edge and cups a hand to his ear, playing dumb. ~What's that? We're havin' trouble hearin' ye up here.~"; Ask: "The guard with the hooked nose scratches his head, puzzled. ~We're just doin' our jobs, ye see?~"; Attack: "The hook-nosed guard shakes his head. ~Sorry fellow, there isn't much ye can do to us from down there, now is there?~"; Give: if (noun == trumpet) "~If we'd wanted that, we wouldn't have thrown it down the pit!~"; <>; Kiss: if (player in FallingPit) "You'll have to stop falling first."; "You'll have to get out of this pit first."; Order: "The two guards share a chuckle and one calls down, ~Now you're not our boss, are ye? 'Cause if ye were, we wouldn't have just thrown ye down this here pit!~"; Show: "The two guards squint at ", (the) noun, ". The more verbose of the two calls down, ~So what?~"; Tell: "It's a bit late to talk your way out of this sentence."; WakeOther: "The guards are already awake."; ], orders [; Climb, Enter: if (noun == PBSides) "The guards laugh. ~Why would we want to go down there?~"; Go: "~Oh we'll be gone soon enough! Ye don't have to worry yourself about us.~"; Jump: "One of the guards salutes you mockingly. ~Yes sir! How high sir?~"; Look, LookDown: "~We see you down there!~"; NotUnderstood: "One of the guards leans over the edge and cups a hand to his ear dramatically. ~What's that? We're havin' trouble hearin' ye up here.~ Obviously it isn't true since you can hear every word clearly."; default: switch (verb_word) { 'hello', 'hi', 'howdy': "Your greeting doesn't make it to the top of the pit, so you wave instead. The hook-nosed guard waves back. ~Hello!~"; 'goodbye', 'bye', 'aloha': "The hook-nose guard calls down, ~Why are you saying goodbye? There's nowhere to go, unless you're about to end up on in a monster's belly!~"; 'yes', 'y//': "Both guards nod vigorously. ~Yes indeed! There's no doubt about it!~ The guard with the hooked nose blinks. ~What are ye talking about?~"; 'no', 'n//': "~I can see why ye'd protest to this sentence, being the subject of it and all, but there isn't much you can do now.~ The hook-nosed guard rubs his nose."; 'maybe': "Both guards nod vigorously. ~Indeed! There's a distinct possibility!~ The guard with the hooked nose blinks. ~What are ye talking about?~"; } "The two guards share a chuckle and one calls down, ~Now you're not our boss, are ye? 'Cause if ye were, we wouldn't have just thrown ye down this here pit!~"; ], bottomQuip [count; switch (count) { 0: "^^Jim grimaces and sucks his tooth. ~Ouch! That had to sting...~ He cups his mouth and shouts down to you, ~You're lucky, old pal! A few people have been known to break all of their limbs with that drop!~ He elbows Rob and snickers. ~But then, it wouldn't be much of an experience if he up and died so quickly, eh?~ Rob nods. ~Indeed...~^^By some trick of acoustics, you can still hear the guards' banter quite clearly."; 1: "^Up above, Jim holds a whispered conversation with Rob before disappearing from view. He returns a few moments later with a large oblong case. ~We almost forgot to give ye your trumpet back!~ With a grunt, he tosses the case into the pit and it begins the downward journey you just finished."; 3: "^Jim calls down again, ~Mind that ye watch out for the lurkin' sea monsters down in all of that mud! They're hungry little devils, they are, and it'd be a shame to see ye eaten up.~ He puts a gloved hand to his mouth and stage-whispers sideways to Rob. ~Though that's what usually happens to 'em all, isn't it, Rob?~ The other guard nods agreeably. ~Quite right...~^^The trumpet case continues to fall. Luckily, the clasps seem to have stayed latched despite the beating it is taking on the way down."; default: self.randomQuip(); } ], downQuip [count; switch (count) { 1: "The guard with the hooked nose calls down, ~There's no need to be impatient about it! Ye'll get there soon enough, I'd say...~ He snickers into a glove."; 2: "The hook-nosed guard cups his hands to his mouth. ~If I recall my schoolin', the great physicist Yodelus Eggplant said, 'If you're already goin' down, you'll keep goin' down' ...or somesuch.~ He nods sagely."; 3: "Jim scratches his chin. ~Hmmm, or perhaps it was, 'Physical NPCs with kinetic energy have a tendency to, err, keep doin' what they want.' ~ He waves a glove airily. ~Whatever... It sounded very intelligent-like when I read it before...~"; 4: "Jim waves to get your attention. ~But point of the matter is, old pal, ye'll be hittin' the bottom of this 'ere pit before very long anyhow, so why not just sit back and enjoy the ride?~"; 5: "~Look at him, Rob, the poor fellow's gone mad!~ The hook-nosed guard gestures to his companion who looks up from the scroll. ~The way he's rushin' to get to the bottom, you'd think he'd never been thrown in a pit before!~ ~Indeed...~ muses Rob."; } ], fallQuip [count; switch (count) { 1: "^Up above, the guard with the hooked nose nudges his companion. ~Hey Rob, aren't ye supposed to read the fellow his sentence?~ The other guard blinks and nods. ~Quite right, Jim...~ He searches for the scroll in the pockets of his tights for a few seconds before realizing that they have no pockets. ~One moment...It's around here somewhere.~ He disappears from view.^"; 2: move FPScroll to FallingPit; "^Rob the Guard returns to the edge of the pit carrying a scroll. He unrolls it and begins to read as the wind whips past your ears. ~Whereas today is the day after yesterday and the day before tomorrow, and whereas I, King Goosen of Papoosen have set to this document my seal, and whereas my seal ran off in search of fish, requiring me to get another...~ The hook-nosed guard elbows Rob. ~Skip to the end, Rob. Poor fellow's goin' to hit the bottom soon.~^"; 3: "^~Good point there...~ Rob the Guard clears his throat, searching for a good spot to continue from. ~And when in the course of human events, eh, so and so and so and so...Ah, here we are!~ He moves further down the scroll and resumes his proclamation. ~...and since I, King Goosen, did not like his performance of 'Ode to a Duck', feeling that it was inflammatory, I hereby banish him from my realm to spend the rest of his days in Orchestra Pit, unless he should die from the fall, as most people tend to do.~^"; 4: "^Rob the Guard adjusts his spectacles. ~And should he, in that time, learn to play better, it shall not matter, since there is no way back out of the Pit. This I hereby put to paper as my word is the law when the law is my word, when it is heard. Indeed. Thus I spake. Er, spoke. Alright, scribe, stop your dictating now.~ Finishing, Rob rolls up the scroll and puts it away.^^With a loud SHLURP, you land in the mud at the bottom of the pit..."; } ], randomQuip [; if (random(100) < 60) rtrue; self.randomCount++; switch (self.randomCount) { 1: "^Rob whispers something to Jim and they both laugh."; 2: "^Rob calls down, ~Hallo down there! Are ye bored yet? It must get pretty tedious explorin' a room with no exits in any of the four cardinal directions but it wouldn't be much of a prison otherwise, eh? It's not like we promised ye a beach resort!~"; 3: "^Rob squints against the sun. ~Hey, what are ye doin' down there? I hope ye aren't tryin' to escape, since there's no way out of Orchestra Pit. Just be a good fellow and wait for the sea monsters to come eat ye.~"; 4: print "^Jim shields his eyes from the sun and peers into the gloom. ~Ye comfy down there? I s'pose we could always throw ye down an "; print (string) random("elvish sword", "antique brass lantern", "enchanted spellbook"); " if it'd help you feel at home. There's no way out of the pit, so ye'd best get settled in.~"; 5: "^~Sea monsters should get here any minute now,~ proclaims Rob cheerfully."; 6: "^~Nothin' personal, but it's always fun watchin' poor fellows like yourself gettin' munched on by the sea monsters!~ Jim nods vigorously and Rob agrees. ~Indeed...~"; default: if (random(100) < 20) print_ret (string) random("^The two guards chuckle at some unheard joke.", "^Jim polishes his spectacles. "); } ], has scenery ! initial in PitBottom, prevent double descriptions proper ! Jim and Rob, not a Jim and Rob pluralname; ! They not He. NPC theWidow "widow Fou-llama" DrawingRoom with name "widow" "fou" "llama" "fou-llama" "foullama" "lady" "woman" "madam", timer 0, article "the", initial [; if (self hasnt firstTime) { StartDaemon(self); give self firstTime; "A woman sitting on a divan looks up from her book as you enter. ~Well, it is a new face!~ She studies you closely and relaxes when she sees that you carry no brooms. ~I am the widow Fou-llama and this is my cottage.~ Requisite introductions accomplished, she buries her head in the book and continues reading."; } if (self has general) "Widow Fou-llama is here, deeply engrossed in a gripping passage of her novel."; "Widow Fou-llama is here, sitting on the divan and reading."; ], description "Widow she may be, but the lady doesn't look a day over thirty-two. Her wardrobe is proper to the point of being uptight and her hair is pinned up in a bun. The widow sits on the divan, engrossed in a book.", before [; Colour: "You play a melody brimming with runs and arpeggios. The world around you seems a little brighter but nothing else happens."; Greet: "The widow greets you without missing a word of her novel. ~Good day.~"; Heavy: "The threnody seems to weigh upon your soul, but no physical effects can be seen."; Eat, Lift, Pull, Push, Rub, Squeeze, Taste, Touch: "The widow gives you a matronly glare which makes you want to keep your distance."; Jig: "The widow claps her hands in time with the music. ~That almost makes me want to dance like a schoolgirl!~ When the song is over, she picks up her novel again."; Listen: "The widow isn't saying much."; Love: if (theButler notin DrawingRoom) "A pleasing suspension of major sevenths outlines this lovely melody. Nothing happens though."; Smell: "The widow smells of clean towels and perfume."; Take: "The widow clucks her tongue. ~Keep your hands to yourself.~"; Talk: "You'll have to specify what you want to say."; ], life [; Answer: switch (noun) { 'hello', 'hi', 'howdy': "The widow greets you without missing a word of her novel. ~Good day.~"; 'goodbye', 'bye', 'aloha': "~Come again.~ The widow continues to read."; 'yes', 'y//': "The widow looks confused. ~What are you agreeing with?~"; 'no', 'n//': "The widow looks confused. ~What are you disagreeing with?~"; 'maybe': "The widow looks confused. ~What are you hinting at?~"; } "The widow just shrugs and continues her voracious reading."; Ask: if (self has general) "~Not right now, this is a very interesting passage!~"; self.askAbout(second); rtrue; Attack: "That wouldn't be proper at all!"; Give: if (self has general) "~Not right now, this is a very interesting passage!~"; switch (noun) { cupWater: "~Thank you, traveler, but I am not thirsty.~"; herring: "The widow shoos the fish away. ~Get that smelly thing out of my house!~"; lostRing: "~Oh, that is much too expensive a gift for me!~"; } "The widow declines. ~No thank you.~"; Kiss: "The widow fends off your advances. ~I barely know you!~"; Order: if (self has general) "~Not right now, this is a very interesting passage!~"; "The widow glares at you. ~Don't presume to order me around.~"; Show: "The widow just ignores your display and continues reading."; Tell: if (self has general) "~Not right now, this is a very interesting passage!~"; switch (second) { 'diary', 'journal', 'book': if (diary has flag) { if (theButler in location) "You think it might be prudent to wait until the butler leaves before talking about him."; if (self hasnt flag) { give self flag; score = score + 2; "The widow sets down her book for a moment and looks at you in surprise. ~My butler?~ She stares off into space. ~I never knew that...you know, he does look somewhat fetching in that tuxedo of his.~ She giggles and returns to reading.^^[You have gained two points for Meddling.] "; } "~Yes, I know. Strange to think that I missed it for some many years. I shall have to see how he acts next time we have dinner.~"; } 'butler', 'amoshtuff': if (theButler in location) "You think it might be prudent to wait until the butler leaves before talking about him."; if (diary has flag && self hasnt flag) "~My butler is in love with me?~ The widow snorts. ~You're putting me on...where's your proof?~"; if (diary has flag && self has flag) "~How very peculiar that I didn't notice before!~"; "~Yes, yes, I already know who my butler is. I've lived here for years.~ She waves you away. ~Stop interrupting my reading.~"; 'love': if (diary has flag && self hasnt flag) "~My butler is in love with me?~ The widow snorts. ~You're putting me on...where's your proof?~"; if (diary has flag && self has flag) "~How very peculiar that I didn't notice before!~"; } "The widow nods absently. ~Very nice. Okay.~"; ThrowAt: "That would not be very polite."; WakeOther: "The widow is awake already."; ], orders [w; if (self has general) "~Not right now, this is a very interesting passage!~"; Attack: "~Certainly not! Violence isn't the answer.~"; Enter: if (noun == DRDoor) "~I will go to bed when I am done reading.~"; Give: if (noun == DRBook) "The widow looks up at you. ~Perhaps when I am finished.~"; if (noun == DRStuff) "The widow politely declines. ~They are not for sale.~"; Go: if (noun == e_obj) "~I will go to bed when I am done reading.~"; if (noun == w_obj) "~Not now... there is nothing to do out there.~"; Listen: "The widow listens. ~I hear nothing.~ She returns to her novel."; Look: "The widow looks around the room."; Read: if (noun == DRBook) "~I am reading already! Well I would be if you were not interrupting me.~"; Push: if (noun == DRPlant) "~And make a mess on my clean floor? No thank you.~"; Smell: if (herring in player) "~I smell a foul fishy odour.~"; "The widow sniffs. ~I don't smell anything.~"; Where: wn = consult_from; w = NextWord(); switch (w) { 'amoshtuff', 'butler': if (theButler notin location) "~He is probably out in his cottage. He tends to stay out there unless I call for him.~"; "~He's right there!~"; 'ahtha', 'builder': "~I don't know where the builder could be. He hasn't been here in quite some time.~"; 'book', 'novel': "~It's right here in my hands.~"; 'community', 'nolava', 'odd', 'volcano': "~You're standing in it. The Community is entirely inside this volcano.~"; 'husband', 'dead': "The widow shakes her head, ignoring her book for a moment. ~I would really prefer not to talk about him.~"; 'granite', 'parts', 'pieces', 'statue': "~The granite pieces are probably still out in the yard, unless the butler finally did something about them.~"; 'maze', 'security': "~It's to the south of my estate.~"; 'me', 'i//': "~Are you still here? I thought so.~"; 'potted', 'pot', 'fern': "~It's in the corner behind you.~"; 'widow', 'fou', 'you', 'llama', 'fou-llama', 'self': "~I'm right here, traveler.~"; } "The widow just shrugs and continues her voracious reading."; WhoWhat: wn = consult_from; w = NextWord(); self.askAbout(w); rtrue; default: switch (verb_word) { 'hello', 'hi', 'howdy': "The widow greets you without missing a word of her novel. ~Good day.~"; 'goodbye', 'bye', 'aloha': "~Come again.~ The widow continues to read."; 'kill': "~Certainly not! Violence isn't the answer.~"; 'yes', 'y//': "The widow looks confused. ~What are you agreeing with?~"; 'no', 'n//': "The widow looks confused. ~What are you disagreeing with?~"; 'maybe': "The widow looks confused. ~What are you hinting at?~"; } "The widow glares at you. ~Don't presume to order me around.~"; ], daemon [; self.timer++; switch (self.timer) { 1, 2, 3: if (random(100) < 20 && player in DrawingRoom) print_ret (string) random("^The widow turns a page.", "^The widow mumbles as she reads her novel.", "^Widow Fou-llama continues to read. "); 4: give self general; if (player in DrawingRoom) { print (string) random("^~Fascinating!~ ", "^~Amazing!~ ", "^~My goodness!~ "); "The widow becomes enthralled in a passage and reads in her own little world, seemingly cut off from real life."; } 7: give self ~general; if (player in DrawingRoom) { print "^The widow looks up from her book. ~That was an exceedingly "; print (string) random("well-written passage!~ ", "well-contrived plot twist!~ ", "well-done passage!~ "); } if (DRPlant has flag) { StartDaemon(theButler); if (player in DrawingRoom) { print "^^She spies the upset fern in the corner and gasps. ~Butler Amoshtuff!~ she cries. ~There's a mess in here for you to clean!~ She gives you a dirty look."; if (DRPlant.count == 10) " ~You just can't leave the damn fern alone can you?~^"; } } if (player in DrawingRoom) ""; 9, 10: if (random(100) < 20 && player in DrawingRoom) print_ret (string) random("^The widow turns a page.", "^The widow mumbles as she reads her novel.", "^Widow Fou-llama continues to read."); 11: self.timer = 0; } rtrue; ], askAbout [w; switch (w) { 'amoshtuff', 'butler': print "~Butler Amoshtuff has been my faithful caretaker for years.~"; if (self has flag) " She stops and thinks for a moment. ~Strange that I never realized he was in love with me.~"; ""; 'ahtha': "~Ahtha? Oh yes, the granite fellow. He dumped a pile of granite in my front yard a long time ago and never returned. Apparently it was for some statue that butler Amoshtuff had requested.~"; 'book', 'novel': "~It is a classic... I've read it over four hundred times, and some passages still keep me riveted.~"; 'broom', 'peddlers', 'sellers', 'salesman', 'salesmen': "The widow looks at you suspiciously. ~I certainly hope you're not a peddler. If you are, then you're not welcome in my house.~"; 'community', 'nolava', 'odd', 'volcano': "~It's quite peaceful down here, especially with no close neighbours. I spend the time reading and enjoying the solitude. Of course, I wish I could get out to the library on occasion.~"; 'cottage', 'red', 'blue': "~This is where I live. My butler lives across the yard.~"; 'husband', 'dead': "The widow shakes her head, ignoring her book for a moment. ~I would really prefer not to talk about him.~"; 'granite', 'pieces', 'parts', 'statue': "~I don't know the particulars about it. You should probably ask Ahtha or my butler.~"; 'knick-knacks', 'knick', 'knack', 'useless': "~Aren't they quaint? I collected them throughout my years on the surface and have each one of them polished daily!~"; 'maze', 'security': "The widow frowns. ~Well it seemed like a good idea at the time. Hindsight let us realize, however, that Fou-llama cannot be spelled going back out, so we are all stuck here forever. You might as well make yourself at home.~"; 'me', 'i//': "~I really don't know much about you.~"; 'love', 'springtime': "~Bah, who needs it?~"; 'potted', 'pot', 'fern': "~It doesn't seem to thrive down here. I try to keep it healthy though.~"; 'widow', 'fou', 'llama', 'fou-llama', 'self', 'herself': "The widow smiles at you. ~That is me. I moved to the Community in 1/07.~"; } "The widow just shrugs and continues her voracious reading."; ], has proper female ! Is a woman ~firstTime ! Never met / met ~flag ! Unaware / Aware of love ~general; ! Undistracted / distracted