replace userinit: function
{
   "\bPoor Uncle Foggy.  He was the best guardian any kid could ever ask for.
       After your parents died in that freak waterbed accident, Uncle Foggy practically
       raised you and your twin sister Winnie.  You grew up in his home full of wacky
       inventions - practical jokes for all occasions.  Uncle Foggy was a prankster, no
       two ways about it.  It's only been a couple of years since you and Winnie left for
       college.  Since then you've spoken far too infrequently.  When you last spoke, Uncle
       Foggy rambled on and on about some ultimate practical joke, but you had a class on
       gallinaceous theology to get to.
       \b
       You and Winnie pull in to Foggywood Estate in your beaten-up
       coupe.  The white picket gate swings quietly
       shut behind you as you kill the engine.  Unfortunately your relatives, the Barnevelders
       from Rhode Island, have also just arrived.  Uncle Orpington and Aunt Lamona are just
       climbing out of their gleaming black sedan, while your cousin 'Red' sits in his ridiculous
       monster truck and leans on the horn, which blares an ear splitting rendition of
       'La Cucharacha.'
       \b
       Not a very auspicious way to kick off the reading of Uncle Foggy's will, is it?
   \b";
   version.sdesc;
   "\b";
   Me.location := global.start;          // move player to initial location
   global.start.lookAround( true );      // show player where he is
   global.start.isseen := true;          // note that we've seen the room
   notify(global, #events, 0);
}

replace version: object
 sdesc = "\(Foggywood Hijinx\) Release 2\n
                               (Type \"about\" for more information)\n
                               Copyright (c) 1998 by TextFeather, Inc.  All rights reserved.\n
                               Created for Adam Cadre's Chicken Comp and Lucian Smith's Mini-Comp.\n
                               Developed with TADS, the Text Adventure Development System.\n"
;

replace global: object
 start = outside
 turnsofar = 0                          // no turns have transpired so far
 score = 0                          // no points have been accumulated yet
 maxscore = 10                                   // maximum possible score
 verbose = true                        // we are currently in VERBOSE mode
 lamplist = []            // list of all known light providers in the game
 mystatus = 0
 ischicken = nil
 rapped = nil
 tvon = 0
       beakyou = "You can only carry one thing at a time in your beak.  "

       b1 = nil //helpers are on buffalo
       b2 = nil //bellows is in place
       b3 = nil //straw is attached to bellows
       b4 = nil //straw is attached to balloon
       b5 = nil //balloon is in knot
       b6 = nil //balloon is full
       b7 = nil //everything in place
       b8 = nil //balloon is attached to bellows

       btot = {
               if (global.b7) return( 7 );
               else if (!b1 and !b2) return( 0 );
               else if (b1 and !b2) return( 1 );
               else if (!b1 and b2) return( 2 );
               else if (b1 and b2 and b3 and b8) return( 11 );
               else if (b1 and b2 and !b3 and !b7 and !b8) return( 3 );
               else if (b1 and b2 and b3 and !b4) return( 4 );
               else if (b1 and b2 and b3 and b4 and !b5) return( 5 );
               else if (b1 and b2 and b3 and b4 and b5 and !b6) return( 6 );
               else if (b1 and b2 and b3 and b4 and b5 and b6) return( 7 );
               else if (b1 and b8 and !b6) return( 8 );
       }

       //0 = !b1 + !b2 nothing
       //1 = b1 + !b2 helper in place
       //2 = b2 + !b1 bellows in place (+any other condition), but not helper
       //3 = b2 + b1 + !b3 + !b7 + !b8 bellows and helper in place, no balloon or straw
       //4 = b1 + b2 + b3 + !b4 bellows connected to straw, no balloon
       //5 = b1 + b2 + b3 + b4 + !b5 bellows to straw to balloon
       //6 = b1 + b2 + b3 + b4 + b5 + !b6 bellows to straw to balloon in knot
       //7 = b1 + b2 + b3 + b4 + b5 + b6 bellows to straw to full balloon in knot
       //8 = b1 + b7 + !b6 helper in place + balloon on bellows

       chickens = [
               'Uncle Orpington'
               'Aunt Lamona'
               'Mr. Dorkings'
               'Cousin Red'
       ]
       recipelist = {
               //if (rand(3) = 1)
                       say(self.recipemsg[rand( length(self.recipemsg) )]);
       }
       recipemsg = [
               '\b"Once we\'re done with our coq au vin," says Julia Childs, "we\'ll move on to a
                       lovely chicken divan recipe."  '
               '\b"Thanks for tuning in," says Julia Childs. "I know you\'ll just LOVE our all day long
                       chicken recipe-athon!"  '
               '\bOn the television, Julia Childs mercilessly pounds the carcass of some poor
                       disemboweled fowl with a - gulp - meat tenderizer.  '
               '\b"You know," says Julia as she strips the flesh off some poor dead bird, "the thing
                       I like about these Purdue chickens is how nice and easily the skins slide off.  I guess
                               it\'s true what they say.  It really DOES take a tough man to make a tender
                               chicken."  Julia\'s audience laughs politely.  '
               '\b"I\'ve never tasted human flesh," says Julia, "but I hear it tastes just like
                       Chicken!  Doesn\'t THAT make you want to pat your tummies and say
                       yummy yummy, viewers?"  '
               '\bOn the television, Julia Childs is busy shoving her entire forearm up some poor
                       chicken\'s posterior.  How humiliating!  '
               '\bThe terrible pounding resumes briefly as Mrs. Faverolles makes another attempt
                       at the door.  '
               '\bA gutteral French accent beyond the door can only be Mrs. Faverolles cursing
                       Dorkings for chasing her out of the study during her program.  '
               '\b"I once killed a chicken just to watch it die," says Julia Childs.  '
               '\bOn the television, Julia Childs is hacking the limbs off some unfortunate fowl with
                       a butcher\'s knife the size of Bayonne, New Jersey.  '
               '\bOn the television, Julia Childs coughs up a mouthful of feathers.  "Oh, dear!" she
                       exlaims.  "Excuse me!"  '
               '\bOn the television, Julia Childs cracks an egg into a bowl, whips it into a light batter,
                       and then drops eviscerated chicken parts into it.  "Well," says Julia, "I guess that
                               answers the question of which came first!"  '
               '\bOn the television, Julia Childs invites an audience member up to assist her.  The
                       volunteer hesitates at reaching into the chicken\'s cavity, prompting Julia to ask
                       "What\'re you... chicken?"  Julia laughs hysterically at her own joke, accompanied
                       by a smattering of applause from the audience.  '
               '\bOn the television, an audience member asks Julia if she uses free range chickens.
                       "Free range!" she shouts cheerfully.  "Gas range is more like it!"  '
               '\bOn the television, Julia Childs leans out into her audience and asks conspiratorially,
                       "Do you folks know why the chicken crossed the road?"  After a moment she answers,
                       "Because it was hauled across in a butcher\'s cart, of course!"  Her joke is met by
                       silence from the audience, prompting her to respond cheerily with "Well!  THAT joke
                       sure laid an egg!"  '
               '\bOn the television, Julia Childs sneaks a sip of sherry from a bottle beneath the
                       counter.  You hear the word \'cirrhosis\' shouted from among the audience, to which
                       Julia responds "Oh, pish tosh.  There\'s nothing wrong with MY liver that a little
                       CHICKEN liver won\'t cure!"  '
               '\b"Later today," says Julia Childs, "we\'ll be demonstrating how to perform emergency
                       liver transplant surgery on your house pets using chicken liver!"  '
               '\b"Later on the program," says Julia Childs, "I\'ll show you how to feed a family of
                       four even if your man is bringing home chicken feed!"  '
               '\bOn the television, Julia Childs drops one of the hens she is preparing.  "Oh, too bad,"
                       she says, "Looks like that little chicky flew the coop!"  '
               '\b"On next week\'s program," says Julia Childs, "I\'ll be showing you how to make
                       chicken-fried chicken!"  '
               '\bThe formerly dour Mr. Dorkings makes for a peculiar sight as he rebounds off your
                       uncle\'s desk, leaving a trail of black feathers.  '
               '\bAunt Lamona and Uncle Orpington - at least you \(think\) they\'re Aunt Lamona and
                       Uncle Orpington - slam into each other at full tilt and knock each other onto the floor.  '
               '\bRed - at least you \(think\) it\'s Red - clambers up onto the sofa and crows at the
                       top of his scrawny little lungs.  '
               '\bCousin Red mistakenly runs into Aunt Lamona - she raises a great squawk and
                       pecks Red viciously in return.  '
               '\bUncle Orpington pecks at the carpet as if looking for worms.  '
               '\bUncle Orpington pulls a long strand of fiber from the carpet.  Cousin Red
                       jealously tries to snatch it away, and a tug-of-war ensues.  '
       ]
       /*'\bWinnie calmly follows you about the room, observing your actions with interest.  '
       '\bWinnie, following closely, cocks her head quizzically at your actions.  '*/
 events = {
               switch(global.turnsofar) {
                       case 1:
                               "\bThe Barnevelders glare haughtily at you and Winnie as you all wait for
                                       admittance to Uncle Foggy's house.  Not a word passes between the two
                                       factions.  So far as you know, the Barnevelders have never even visited
                                       Foggywood before.  ";
                               break;
                       case 2:
                               "\bNone too soon, the front door is opened, revealing Mr. Dorkings, Uncle Foggy's
                                       solicitor.  A dour man in black who rarely smiles, you've never quite trusted
                                       Dorkings.
                               \b\"Mm,\" is all Dorkings has to say in greeting.  \"You've all arrived.  Good.
                                       We can begin right away.  Please follow me.\"
                               ";
                               executor.moveInto( outside );
                               break;
                       case 3:
                               "\bYou and your relatives dutifully troop into the house after Dorkings.  \b";
                                       foyer.lookAround( true );
                                       "\b\"We will be adjourning in the study for the reading of... \"  He breaks off in
                                       mid-sentence and cocks his head towards the study.  You listen carefully, and
                                       hear what sounds like polite applause.  Dorkings turns back to all of you and says,
                                       \"Mm.  Please wait here while I ensure that all is in readiness,\" before
                                       disappearing into the study.
                                       \bOdd, you think.  Knowing Dorkings, he would have checked and double checked
                                       everything long before your arrival.
                               ";
                               Me.moveInto( foyer ); sister.moveInto( foyer ); executor.moveInto( study );
                               red.moveInto( foyer ); orp.moveInto( foyer ); aunt.moveInto( foyer );
                               break;
                       case 4:
                               "\bAfter a brief moment you hear rising voices.  Well, one voice anyway.
                                       Dorkings' tone never rises or falls, but the other voice sounds like...
                                       \bMrs. Faverolles, the cook, storms out of the study, slamming the door
                                       against the wall. You can see from her complexion that she's at full
                                       broil.  Ignoring your party, she whirls around and hurls a string of
                                       incomprehensible French epithets towards the study, waving a sauce spattered
                                       spoon in one hammy fist.  Her other hand clenches a saucepan full of some rich
                                       burgundy sauce.
                               ";
                               cook.moveInto( foyer );
                               break;
                       case 5:
                               "\bMrs.  Faverolles storms off toward the kitchen, still raging.  Once the noise of
                                       her passage has quieted, Dorkings gestures your party into the study.
                                       \bYou and your relatives shuffle inside and take seats at opposite sides of the room.
                                       You and Winnie fill out the love seat, while the Barnevelders perch like chicken
                                       hawks on the matching sofa.  \b";
                                       study.lookAround( true );
                                       "\bYou notice that an integrated television/video
                                       player has been set up on Uncle Foggy's desk, about where Uncle Foggy would be
                                       if he were presiding.
                               ";
                               Me.moveInto( loveseat ); sister.moveInto( loveseat ); cook.moveInto( nil );
                               red.moveInto( couch ); orp.moveInto( couch ); aunt.moveInto( couch );
                               break;
                       case 6:
                               "\b
                               \"Just a moment more.  Mm,\" says Dorkings, as he turns to the television.
                                       Your mind wanders, and you find yourself focusing on the Buffalo-On-A-Spring
                                       (pat. pending) mounted
                                       on the wall behind Uncle Foggy's desk.  It was one of Uncle Foggy's funniest
                                       inventions, a terrific source of amusement.  Well, for everyone but the unlucky
                                       victims, anyway.
                               ";
                               break;
                       case 7:
                               "\b\"Mm, here we are.\"  Dorkings steps aside as the television springs to life.
                                       And there on the screen, real as life but only half as dead, is Uncle Foggy.
                                       \b\"Greetin's, family,\" begins your deceased uncle.  \"Ah suppose, Ah say,
                                       Ah suppose you're all wondering why Ah've gathered you here today.\" Uncle
                                       Foggy pauses for an expectant moment, while the Barnevelders glare
                                       dispassionately.  Winnie rolls her eyes, though at Uncle Foggy or the
                                       Barnevelders, you're not sure.  \"Haw haw!  It's a joke, son!
                                       Ah made a funny!  Get it?  Ah'm too fast for you!  Gotta keep up, son!\"
                               ";
                               foggy.moveInto( study );
                               global.tvon := 1;
                               break;
                       case 8:
                               "\b
                               \"As you all know, Ah've made, Ah say, Ah've made a bunch of dough - that's
                                       SAWbucks, boy - off my inventions.  Now Ah've gotta figure out who gets it.\"
                                       Uncle Foggy stares out of the screen for a moment before continuing.  \"Well
                                       Ah won't do it, y'hear!  Never was any good at this family stuff, and Ah'm not
                                       going to start playing favorites now.  Instead, Ah'm leavin' it, Ah say, Ah'm
                                       leavin' it up to you all!\"  You and Winnie and the Barnevelders exchange
                                       quizzical glances, but no one speaks.
                               ";
                               break;
                       case 9:
                               "\bUncle Foggy rolls on.  \"What Ah propose, Ah say what Ah PROPOSE is a
                                       challenge.  And the ones who best know me and my ways, well, they're gonna
                                       come out ahead.\"

                               \bUncle Orpington leaps angrily to his feet and shouts, \"What new foolishness
                                       is this!\"  Aunt Lamona spears him with a withering glance, and he reluctantly
                                       reseats himself.

                               \b\"Now Orpy, by now Ah expect you're gettin' pretty riled up,\" says Uncle
                                       Foggy with frightening prescience.  \"Well them's the breaks!  The breaks, Ah
                                       say!  Maybe if you'd ever taken favor on my work, things'd be different now.\"
                               ";
                               break;
                       case 10:
                               "\b\"Contest goes like, Ah say, contest goes like this!  Ah've scattered ten of my
                                       inventions around, Ah say, all 'round my estate.  Dorkings here will give you all
                                       a list.  The one o' you who finds the most number of things on the list gets it, Ah
                                       say gets it ALL!  The house, the money, and most importantly... Dorkings?  Ain't
                                       you ready yet, suh?\"

                                       \b\"Ah, mm.  Yes.\"  Dorkings retrieves a black shammy sack from the desk
                                       and loosens the cord binding it shut.  Reaching inside, he pulls out a matte black
                                       pyramidal object with a small switch at its apex.  You jerk instinctively as
                                       Dorkings fumbles with the strange object.  Everything slows as you watch it
                                       tumble to the ground with inexplicable dread.  It lands on the shag rug with a
                                       faint but sickening 'click.'

                                       \bSuddenly the world seems larger.  You look to Winnie for help only to find...
                                       a chicken!  Staring back at you is a perfectly normal white crested hen!  You look
                                       around.  Oh, no.  Where once stood Mr. Dorkings and your relations, now you see
                                       only chickens.  A long moment of stunned silence follows, as the room's occupants
                                       glance around nervously at each other.

                                       \bThe silence is broken by Uncle Foggy's booming voice.  \"You got it yet
                                       Dorkings? Good.  Now, what you got here is my latest invention.  The ultimate,
                                       Ah say, the ULTIMATE practical joke!  Great at parties!  It'll make a million,
                                       if my name isn't Fogarth Barnevelder!  And the one of you all to bring back the
                                       most items on my list, gets it!  And that's, Ah say, that's IT!  Dorkings, you can
                                       stop this consarned thing any time now.  My, Ah say, my job here is done.\"

                                       \bAs the implications of the situation sink in, there is a sudden tidal swell of
                                       panic.  Someone - Aunt Lamona?  Cousin Red? - leaps from their perch and sets
                                       up a dreadful squawking.  Soon, the room is full of squawking, screaching birds
                                       running in panicked circles, feathers flying everywhere.
                               ";
                               gag.moveInto( studyfloor );
                               foggy.moveInto( nil );
                               global.ischicken := true;
                               sister.moveInto(studyfloor);
                               orp.moveInto(studyfloor);
                               aunt.moveInto(studyfloor);
                               red.moveInto(studyfloor);
                               executor.moveInto(studyfloor);
                               addword(sister, &noun, 'chicken');
                               addword(sister, &noun, 'hen');
                               addword(aunt, &noun, 'chicken');
                               addword(aunt, &noun, 'hen');
                               addword(executor, &noun, 'chicken');
                               addword(executor, &noun, 'rooster');
                               addword(orp, &noun, 'chicken');
                               addword(orp, &noun, 'rooster');
                               addword(red, &noun, 'chicken');
                               addword(red, &noun, 'rooster');
                               addword(barnevelders, &noun, 'chickens');
                               addword(barnevelders, &noun, 'roosters');
                               addword(barnevelders, &noun, 'hens');
                               break;
                       case 11:
                               "\bThe cacophany is broken by a sudden click as loud as the hammer of a revolver.
                                       Uncle Foggy's tape rolls to a stop and automatically starts rewinding.  With the
                                       tape's feed gone, the television reverts to receiving broadcast signal.  All eyes
                                       focus on the television as a recognizeable human figure appears, a woman in an
                                       apron standing behind a counter covered with neatly placed cooking utensils.

                                       \b\"Thank you, Charles,\" says Julia Childs.  \"Now that our burgundy sauce is
                                       chilling and the hen's organs have been removed, we can proceed to stewing the
                                       guts and gizzards.\"  Suddenly your attention is drawn to a furious pounding at
                                       the study door.  Oh no - it must be the cook wanting to watch her program!

                                       \b\"SQUAWK!\"  The panic renews with increased fury as your crazed relatives
                                       hurl themselves in shrieking clouds of feathers at every surface in the room.
                                       Well, it looks like its up to you and Winnie to figure out how to reverse Uncle
                                       Foggy's joke.
                               ";
                               julia.moveInto( study );
                               global.tvon := 2;
                               notify(global, #recipelist, 0);
                               break;
                       case 666:
                               "\bYou die and go to hell.
                               \b* * *\b
                               Too  bad!  ";
                               quit();
                               break;
                       default:
                               break;
               }
       }
 noverb = {
       return( global.verbmsg[rand( length(global.verbmsg) )]);
 }
       verbmsg = [
               'You can\'t do that, you dumb cluck!  You\'re a chicken!  '
       ]
       thanks = "\b\bThank you for playing \(Foggywood Hijinx\), a TextFeather release.
               On-line registration for TextFeather products will be available at
               http://www.textfeather.com on or before June 30, 1998.  Thanks for your patience!  "
;

/*
-outside:thing;
*/

outside: room
       sdesc = "\(Front Lawn\)"
       ldesc =         {
               "Uncle Foggy's front lawn teeters just on the border of ill-kempt, though no one
                       specific flaw draws attention.  The three vehicles parked on the lawn fail to aid its
                       appearance.  Uncle Foggy's home, Foggywood Manor, lies to the north, while the gate
                       through which you entered rests back to the south.  Though you can't see it over the
                       hedges, you know that beyond the gate and across the road lies the ramshackle cabin
                       that Uncle Foggy called his lab.  ";
               if (!global.ischicken)
                       "\bThe Barnevelders are here, standing by the front door with you and Winnie.  ";
               else
                       "\bWinnie is here with you, eagerly waiting for your next move.  ";
       }
       north = {
               if (global.ischicken) {
                       "There's no getting back through the window, even if you wanted to.  You can still
                               hear Mrs. Faverolles chasing your squawking relatives and screaming French
                               invectives.  ";
                       return(nil);
               }
       }
       south = {
               if (global.ischicken) {
                       if (global.triedgate)
                               "Not with that fox hanging around out there!  You're going to have to find another
                               way to cross that road.  ";
                       else
                               "You head for the swinging gate, left conveniently ajar, and squeeze through to the
                                       other side.  It looks like an easy trip across the road to Uncle Foggie's lab.  But
                                       just as you're about to set foot on the road, a streak of copper catches your eye.
                                       It's a fox!  You turn tail and run back through the gate, just in time to bump into
                                       Winnie coming out.  The two of you rebound off each other, confusing your sense
                                       of direction.  With a growing sense of urgency you rush at the gate again, and
                                       manage to squeeze through just as a sharp claw swipes at your tail feathers.
                                       The gate bangs shut behind you, startling the fox away for the moment.  Then it
                                       slowly creaks open again. ";
                               global.triedgate := true;
               }
               else {
                       "But you just got here!  Wouldn't you like to at least hear the reading of the will first?  ";
               }
               return( nil );
       }
;

outsidewindow: fixeditem
       verDoOpen(a) = {
               if (!global.ischicken)
                       "Though you and Winnie used to crawl through that window often, the spirit of the day
                       has got you too melancholy to think about it.  ";
               else
                       "You'll never get the window open again from this side.  ";
       }
       location = outside
       adjective = 'study'
       noun = 'window'
       sdesc = "window"
       ldesc = "It's a plain, white-framed, four-panel window that looks in on Uncle Foggy's study.  "
       verDoLookthru(a) = {
               if (!global.ischicken) "The interior of Uncle Foggy's study is dimly lit,
                       and reveals little to your bright adjusted eyes.  ";
               else "You can't see much through the shut window, but you can still hear the
                       horrible massacre within.  ";
       }
;

house: fixeditem
       sdesc = "mansion"
       ldesc = "Uncle Foggy's lovely Tudor mansion sprawls to the north.  Atop the front
               arch spins a creaky old weather vane.  A glance at the window leading in to Uncle
               Foggy's study fills you with nostalgic reverence.  "
       noun = 'house' 'manor' 'mansion' 'home' 'foggywood'
       location = outside
;

vane: fixeditem
       sdesc = "weather vane"
       ldesc = "A creaky old iron weather vane in the shape of a rooster points vaguely northward. "
       adjective = 'creaky' 'old' 'weathervane' 'weather'
       noun = 'vane' 'weathervane'
       location = outside
;

frontdoor: fixeditem
       sdesc = "front door"
       ldesc = "Uncle Foggy's door is painted a simple eggshell white, adorned with a wrought-iron
               knocker in the shape of a crowing cock.  "
       adjective = 'front'
       noun = 'door'
       verDoOpen(a) = {}
       doOpen(a) = { "You raise the chicken knocker and rap lightly on the door. ";
               global.rapped := true; }
       verDoKnock(a) = {self.verDoOpen(a);}
       doKnock(a) = {self.doOpen(a);}
       location = outside
;

knocker: fixeditem
       sdesc = "knocker"
       ldesc = "It's a wrought-iron knocker in the shape of a crowing cock.  "
       adjective = 'wrought' 'iron'
       noun = 'knocker'
       verDoPull(a) = { frontdoor.verDoOpen(a); }
       doPull(a) = { frontdoor.doOpen(a); }
       verDoKnock(a) = { frontdoor.verDoOpen(a); }
       doKnock(a) = { frontdoor.doOpen(a); }
       location = frontdoor
;

coupe: vehicle
       isListed = nil
       sdesc = "coupe"
       ldesc = "Your car is a beaten-up, anonymous-looking two door coupe.  It reminds you of
               one of Uncle Foggy's favorite jokes:  Why has a chicken coop got only two doors?
               Because if it had four it'd be a chicken sedan!  "
       adjective = 'mine' 'our' 'my'
       noun = 'car' 'coupe' 'vehicle'
       location = outside
       verDoBoard( a ) = {}
       doBoard( a ) = {
               if (!global.ischicken)
                       "You just got out of it.  There's nothing inside that you need.  ";
               else
                       "Unfortunately the doors are locked.  Well, not locked, exactly, since the locks don't
                               work anymore.  Certainly chicken-proof, anyway.  ";
       }
       verDoDrive(a) = {"It would help if you were inside it first.  ";}
       verDoSteal(a) = { "Stealing your own car would be silly.  "; }
;

limo:  vehicle
       isListed = nil
       sdesc = "Oldsmobuick"
       ldesc = "Your Uncle Orpington's Oldsmobuick is a beetle black sedan of late vintage.
               It looks big and mean, fit for running down small animals and old ladies on the highway.  "
       adjective = 'black' 'uncle' 'orpington\'s'
       noun = 'sedan' 'car' 'vehicle' 'Oldsmobuick'
       location = outside
       verDoBoard( a ) = {}
       doBoard( a ) = {
               if (!global.ischicken)
                       "Your Uncle Orpington favors you with a foul glance.  ";
               else
                       "Uncle Orpington's steam roller is more suitable to running chickens down than
                               passengering them.  ";
       }
       verDoDrive(a) = {"It would help if you were inside it first.  ";}
       verDoSteal(a) = { "You consider stealing Uncle Orpington's car.  Then you consider
               how bad the food is at the local prison.  You just \(hate\) powdered eggs.  "; }
;

truck: vehicle
       isListed = nil
       adjective = 'cousin' 'red\'s' 'monster'
       noun = 'truck' 'monster' 'vehicle' 'stairs' 'ladder' 'steps'
       sdesc = "monster truck"
       ldesc = {
               if (self.location=outside) {
                       if (Me.location=outside)
                               "Your cousin Red's monster truck is a masterpiece of modern automotive
                               engineering.  Its brightly colored chassis hovers nearly five feet off the ground,
                               suspended by enormous black tires big enough to feed an entire tribe of African
                               pygmies through three rainy seasons.  A galvanized metal stair extends down from
                               the driver's side door, without which tiny Red could never have tamed the monster.
                               Apparently Red left the roof at home, as the cab is open to the air.  Red has
                               obnoxiously parked the truck facing forward right in front of the gate, which
                               forced you to drive around him when you entered.  ";
                       else
                               "The gas pedal, ignition key, and gear stick all promise interesting avenues of
                               investigation.
                               \bWinnie is here with you, eagerly waiting for your next move.  ";
                       if (key.turned) "\bThe monster truck rumbles ominously.  ";
               }
               else
                       "It's a good thing Cousin Red's not here to see his truck.  It's a wreck, filled with
                       fallen debris from its collision with Uncle Foggy's lab.  ";
               }
       location = outside
       stealmsg = "Your Cousin Red sees you aiming for his ride and simpers at you,
               \"Hey, don't even think about it.\"  "
       stealmsg2 = "YEAH!  YEAH!  DRIVE!  LET'S TAKE THIS MONSTER TO \(VEGAAAAS\)!  "
       doSynonym( 'Board' ) = 'Climb' 'Enter'
       doBoard( a ) = {
               if (!global.ischicken) self.stealmsg;
               else if (self.location = lab)
                       "It's too full of debris to reenter.  ";
               else {
                       "Followed by Winnie, you hop up the metal steps and flutter over the door into the cab
                               of Red's truck.  It is with incredible relief that you find Red's car keys hanging
                               from the ignition.  You've never driven a truck like this - let alone while wearing
                               a chicken's body - but the ignition, gear stick and gas pedal look like a good place
                               to start.  ";
               Me.moveInto( self );
               sister.moveInto( self );
               }
       }
       verDoUnboard(a) = {
               if(Me.location<>self) "You're not in the monster truck.  ";
               else
                       "Winnie grabs your tailfeathers with her beak, as if to say \"C'mon,
                       let's get this show on the road!\"  ";
       }
       down = self.verDoUnboard( Me )
       out = self.verDoUnboard( Me )
       verDoSteal(a) = {
               if (!global.ischicken) self.stealmsg;
               else self.stealmsg2;
       }
       verDoDrive(a) = {
               if (!Me.isIn(self)) {
                       if (!global.ischicken) self.stealmsg;
                       else self.stealmsg2;
               }
               else if (!key.turned)
                       "It's not going far without the ignition switched on.  ";
               else if (!stick.shifted)
                       "It's not going far in neutral.  ";
               else {
                       self.stealmsg2;
                       "\b(It might help if you were a bit more specific in your actions.)  ";
               }
       }
;

key: fixeditem
       turned = nil
       doSynonym( 'Turn' ) = 'Switch' 'Turnon'
       verDoTurn(a)={}
       doTurn(a) = {
               if (self.turned)
                       "Winnie pecks you lightly as if to say \"C'mon... let's blow this coop!\"";
               else {
                       "You turn the keys with your beak, and the monster truck roars to life!";
                       self.turned := true;
               }
       }
       adjective = 'ignition' 'rabbit\'s' 'rabbit'
       noun = 'key' 'keys' 'ignition' 'foot'
       sdesc = "keys"
       ldesc = "Thankfully, Cousin Red has left his keys in the ignition.  A lucky rabbit's foot
               dangles from the keychain.  You wonder if the rabbit was still alive when Red cut it off.  "
       location = truck
;

stick: fixeditem
       shifted = nil
       doSynonym( 'Push' ) = 'Move' 'Pull' 'Turn' 'Switch' 'Press'
       verDoPush(a)={}
       doPush(a) = {
               if (!key.turned)
                       "It would help if you turned on the ignition first.  ";
               else if (self.shifted)
                       "Winnie pecks you lightly as if to say \"C'mon... let's blow this coop!\"";
               else {
                       "You and Winnie together both jump on the gear shift, your combined weight just
                       barely enough to slide it into gear.  ";
                       self.shifted := true;
               }
       }
       adjective = 'stick' 'gear'
       noun = 'shift' 'stick' 'gears' 'gear'
       sdesc = "gear shift"
       ldesc = "Cousin Red's gear shift has an eight-ball mounted on the knob.  "
       location = truck
;

pedal: fixeditem
       doSynonym( 'Push' ) = 'Move' 'Jump' 'Stand' 'Standon' 'Press'
       verDoPush(a)={}
       doPush(a) = {
               if (!key.turned)
                       "It would help if you turned on the ignition first.  ";
               else if (!stick.shifted)
                       "It would help if you put the truck in gear first.  ";
               else {
                       "Fearing that even your combined weight may not be enough, you and Winnie
                       jump together onto the gas pedal.  The truck lurches into motion!
                       Rear wheels pealing, it bursts forward, crashing through the front gate
                       \(and across the road, baby!\)
                       At the far side, the truck hits a deep pothole that jolts you and Winnie
                       into the air, giving you a perfect view as the
                       truck slams into one sagging wall of Uncle Foggy's ramshackle lab.  The impact
                       flattens you into the windshield, as debris from the crumbling
                       wall crashes down upon you.
                       \b
                       When the dust finally settles, you and Winnie clamber dizzily out of the truck.
                       Uncle Foggy's lab is a shambles.  Shelves have collapsed, spilling their contents
                       everywhere.  The entire structure looks as though it may fall down at any moment.
                       But there, posted on a relatively stable section of wall, is a diagram outlining
                       the process of Uncle Foggy's Super Funky Chickenizer (pat. pending).
                       Below it, on a sturdy bench, is a small white pyramid - clearly the mate to the
                       device that got you into this mess.
                       ";
                       truck.moveInto(lab);
                       Me.moveInto(lab);
                       sister.moveInto(lab);
               }
       }
       adjective = 'gas'
       noun = 'pedal'
       sdesc = "gas pedal"
       ldesc = "Press it and go \(vroom\).  "
       location = truck
;

horn: fixeditem
       location = truck
       noun = 'horn'
       sdesc = "horn"
       ldesc = "The horn on cousin Red's truck is so loud that when it sounds,
       God fearing Christians kneel in prayer and wait to be swept up into the sky.  "
       verDoPush(a) = {
               "The horn blares out an ear-splitting version of 'La Cucaracha.'  ";
       }
       doSynonym( 'Push' ) = 'Play' 'Press'
;

playVerb: deepverb
       sdesc = "play"
       verb = 'play'
       doAction = 'Play'
;

/*
-lab:thing
;*/

lab: room
       sdesc = "Uncle Foggy's Lab"
       ldesc = "Uncle Foggy's lab is a complete wreck as the result of your recent
               mishap with Cousin Red's truck.  Debris is scattered everywhere.  Posted on
               one wall, like a vision from heaven, is a diagram outlining the process of
               Uncle Foggy's Super Funky Chickenizer (pat. pending).  Beneath it is a sturdy
               bench on which rests a white pyramidal device.  "
       noexit = "You'll never climb out of this wreck in your chicken form.  "
;

bench: chairitem
       sdesc = "bench"
       ldesc = "It's a sturdy lab bench that survived the recent disaster.  Resting on it
               is a white pyramidal device.  "
       adjective = 'sturdy' 'work'
       noun = 'bench'
       location = lab
   outOfPrep = "off of"
   statusPrep = "on"
   doUnboard(a) = {
       "You hop down off the bench, still in your chicken form.  ";
       Me.moveInto(lab);
   }
       down = self.doUnboard( Me )
;

magag: fixeditem
       adjective = 'white' 'matte' 'pyramidal' 'ultimate' 'practical' 'super' 'funky'
       noun = 'pyramid' 'joke' 'invention' 'antidote' 'device' 'humanizer'
       ldesc = "This must be the reversion device for Uncle Foggy's
               Super Funky Chickenizer (pat. pending).  It's a white matte pyramid
               with a small switch at its apex.  "
       sdesc = "Super Funky Humanizer (pat. pending)"
       verDoTake(a) = {
               "Whatever it's made of, it's too big and heavy for you to carry in your beak.  ";
       }
       location = bench
;

toggle2: fixeditem
       location = magag
       noun = 'switch' 'toggle'
       sdesc = "switch"
       ldesc = "It works flip-flop!  "
       doSynonym( 'Flip' ) = 'Turn' 'Push' 'Pull' 'Kick' 'Scratch' 'Peck' 'Press'
       verDoFlip(a) = {
               if (Me.location=lab)
                       "You can't reach the device from the lab floor.  ";
       }
       doFlip(a) = {
               "The switch flips over with a hollow 'click'... and suddenly, the world seems smaller.
                       \b\b\b
                       [Hit any key to continue.]
               ";
               Me.moveInto( diningroom );
               sister.moveInto( diningroom );
               inputkey();
               clearscreen();

               "Much later, you and Winnie sit down to a sumptuous dinner prepared by Mrs. Faverolles.
               You're both able to laugh over the day's events from the comfortable safety of Uncle
               Foggy's expansive dining room.
               \b\t\"What a day!\" you exclaim to Winnie between mouthfuls.
               \n\t\"I know,\" she says, sipping a glass of wine.  \"I thought we would \(never\)
                       find a way to revert to our old selves.\"
               \n\t\"Too bad about the Barnevelders missing their chance to participate in the
                       scavenger hunt.\"
               \n\t\"Oh, yes,\" nods Winnie.
               \n\t\"So.  How are you finding the chicken?\" you ask, changing the subject.
               \n\t\"Mm, it's a big stringy for my tastes.\" says Winnie, chewing a mouthful of food.
               \n\t\"Really?  Mine's quite tender.\"
               \n\t\"Well, you know what they say,\" says Winnie.
               \n\t\"What's that?\" you inquire.
               \b\t\"\(It's all relative!\)\"

               \b\t* * *\b
               Congratulations!  You have won \(Foggywood Hijinx\)!
               \b\bThank you for playing \(Foggywood Hijinx\), a TextFeather
               release.  On-line registration for TextFeather products will be available at
               http://www.textfeather.com on or before June 30, 1998.
               Thanks for your patience!
               ";
               quit();
       }
;

diningroom: room
       sdesc = "dining room"
       ldesc = "Uncle Foggy's dining room is beautifully furnished.  "
;

debris: fixeditem
       sdesc = "debris"
       ldesc = "The remains of what was once Uncle Foggy's lab.  Unidentifiable
       ruins are scattered everywhere.  "
       location = lab
       noun = 'debris' 'mess' 'junk' 'stuff'
;

diagram: fixeditem
       ldesc = "It seems to outline the process of Uncle Foggy's Super Funky Chickenizer
               (pat. pending). "
       location = lab
       noun = 'diagram'
       sdesc = "diagram"
;

cars: fixeditem
       location = outside
       noun = 'cars' 'vehicles'
       sdesc = "cars"
       ldesc = "Your worn out coupe looks pretty shoddy compared to the gleaming lustre of
               the Barnevelder's massive sedan, to say nothing of Red's gargantuan, brilliantly
               painted truck.  "
       verDoSteal(a) = { self.specify; }
       verDoDrive(a) = { self.specify; }
       verDoBoard(a) = { self.specify; }
       specify = "You should specify which one you're referring to: your coupe, Uncle
               Orpington's sedan, or Cousin Red's truck.  "
       isListed = nil
       isplural = true
;

gate: fixeditem
       sdesc = "gate"
       ldesc = "It's a simple picket fence gate that spans a gap between tall hedges on either side.
               The gate opens wide enough to permit vehicles to pass through.  Currently it's slightly ajar.  "
       adjective = 'white' 'picket'
       noun = 'gate' 'fence'
       verdoOpen(a)={}
       doOpen(a) = {
               if(!global.ischicken)
                       "You just arrived.  No need to open the gate now.  ";
               else
                       "The gate is too heavy for you to push open, though you could squeeze through the gap.  ";
       }
       location = outside
;

hedges: fixeditem
       sdesc = "hedges"
       ldesc = "Eight foot high hedges border the property on all sides.  Uncle Foggy was a bit
               on the reclusive side.  "
       noun = 'hedge' 'hedges'
       location = outside
;

fakelab: intangible
       errmsg = self.ldesc
       sdesc = "fox"
       ldesc = "You can't see Uncle Foggy's lab from the yard,
               but you know it's just across the road beyond the gate.  "
       adjective = 'uncle' 'foggy\'s'
       noun = 'lab'
;

fox: intangible
       errmsg = "You can't see the fox, but you know it's still out there.  "
       sdesc = "fox"
       ldesc = "It's little more than an occasional coppery streak beyond the gate.  "
       adjective = 'copper' 'coppery'
       noun = 'fox' 'streak'
;

/*
-foyer:thing;
*/

foyer: room
       sdesc = "\(Foyer\)"
       ldesc = {
               "Uncle Foggy's foyer is tastefully decorated, even if the blue hen wallpaper does
                       seem a bit queer.  Passages from the foyer lead off in many directions, but your only
                       business here today is in the study to the east.  The walls are adorned with glossy photos
                       taken around Uncle Foggy's favorite travel destination.  Nailed to a chest-high post is a
                       stuffed bird, eternally caught in its morning salutation to the sun.  ";
               if (!global.ischicken) "\bThe Barnevelders are here,
                       waiting to be admitted into the study with you and Winnie.  ";
       }
       south = {
               "While standing in the same room as the Barnevelders \(is\) enough to send you
                       screaming out the front door, right now you'd rather bide your time until you've heard
                       the reading of the will.  ";
               return(nil);
       }
       east = {
               "Though you feel as if you should have free run of the place, right now you'll have to
                       wait until Mr. Dorkings allows you to enter.  ";
               return(nil);
       }
       north = {
               "It saddens you to think that, after today, you may never visit Uncle Foggy's home again.
                       But for now you'll just have to wait for the reading of the will.  ";
               return(nil);
       }
       west = self.north
       nw = self.north
       up = self.north
       ne = self.north
;

photos: fixeditem
       sdesc = "photographs"
       ldesc = "Lush photos of the Sun Pyramid taken around Chi-chen Itza.  Uncle Foggy claimed
               to have held great admiration for the builders of the pyramid.  "
       noun = 'photo' 'photos' 'photographs' 'photograph' 'picture' 'pictures'
       location = foyer
;

wallpaper: fixeditem
       noun = 'wallpaper' 'paper' 'hens'
       adjective = 'wall'
       sdesc = "wallpaper"
       ldesc = "A cheery chicken-and-egg motif!"
       location = foyer
;

studydoor: fixeditem
       location = foyer
       sdesc = "study"
       ldesc = "Uncle Foggy's study lies to the east, though you can't see much from here.  "
       noun = 'study'
       verDoBoard(a) = {
               if (global.turnsofar=4)
                       "";
               else "You'll have to wait until Dorkings invites you inside.  ";
       }
;

rooster: fixeditem
       adjective = 'stuffed'
       noun = 'bantam' 'post' 'perch' 'bird'
       sdesc = "stuffed bantam"
       ldesc = "The famous Norwegian Blue Bantam.  No wonder they call it blue - it really does
               look a bit down in the beak.  Perhaps it's pinin' for the fjords?  No, clearly it has
               shuffled off this mortal coil.  After all, the only reason it's even sitting on that perch is
               that it's been nailed there.  "
       location = foyer
;

/*
-study: thing;
*/

study: room
       sdesc = "\(Study\)"
       ldesc = {
               "Light from the outside streams in through the closed window, illuminating
                       Uncle Foggy's comfortably cluttered study.  It's full of interesting odds and
                       ends, not the least of which is the trophy mounted on the wall above the desk.
                       Many were the times that you and Winnie would climb the bookshelves in search
                       of written treasure, and then spread out by the fireplace with your latest finds.  For
                       more dexterous pleasures, there was the carton of assorted works in progress Uncle
                       Foggy usually kept beneath his desk.  If nothing else appealed, sneaking
                       maraschino cherries from the bar was always good for a few giggles.  ";
               if (!global.ischicken) "\bThe Barnevelders are here, seated on the couch across from
                       you and Winnie, while Mr. Dorkings stands beside the desk.  ";
               else "\bThe room is filled with chickens, running in crazy circles and bounding off
                       the furniture and each other.  Resting off to one side of the room is Uncle Foggy's
                       ultimate practical joke.  ";
               }
       noun = 'study'
       west = {
               if (!global.ischicken)
                       "It would be disrespectful to go wondering through the mansion during the reading
                               of Uncle Foggy's will.  ";
               else self.pharoah;
       }
       pharoah = "The Pharoahs built their pyramids on the labor of thousands of slaves, each tied into
                       harnesses and pulling inhuman weight.  This game hates to break it to you, but frankly,
                       you're no Pharoah, and the Barnevelders ain't Jewish.  That door is \(massive\).
                       Perhaps you'd have more luck with the window.  "
       escape = {
                       "You flounce through the window, Winnie close behind.  You've just reached the outside
                               sill when behind you, a thunderous din begins at the
                               door.  The door cracks open to reveal the terrible figure of Mrs. Faverolles!
                               She stands beneath the lintel brandishing the mucous-white corpse of a dead fowl
                               in one hand and a great cleaver in the other.  All is still as she and your relatives
                               regard each other with silent amazement.  The tableau is broken as Julia Childs
                               show cuts to a commercial and an announcer's voice screams \"FUNNY CAR AND
                               MONSTER TRUCK RALLY SUNDAY SUNDAY \(SUNDAAAAY\)!!!\"  Mrs. Faverolles
                               slams the door behind her and wades into the room swinging her bloody cleaver to
                               the sound of manic laughter on the television.  The feathers fly as your relatives
                               carom around the room like chickens with their heads cut off.  You and Winnie watch
                               in horror until the Super-Bendy Balloon-Animal Balloon (pat. pending) beneath the
                               window finally bursts, sending the window speeding
                               shut and throwing the two of you from your perch on the sill.  You flutter to the
                               ground, no worse for wear.  \b";
       }
       south = {
               if (global.b7)  {
                       self.escape;
                       unnotify(global, #recipelist);
                       fox.moveInto( outside );
                       sister.moveInto( outside );
                       return( outside );
               }
               else if (global.ischicken)
                       window.twins;
               else
                       "Crawling through the window just doesn't appeal
                       like it once did when you and Winnie were kids.  ";
       }
;

studydoor2: fixeditem
       ldesc = "The door to Uncle Foggy's study is a great heavy slab of carven oak.  "
       noun = 'door'
       adjective = 'study' 'oak'
       location = studyfloor
       sdesc = "study door"
       verDoOpen(a) = { study.pharoah; }
;

studyfloor: chairitem
       location = study
       sdesc = "floor"
       noun = 'floor' 'rug' 'carpet'
       ldesc = "The shag carpeting makes you hungry for wriggling invertebrates.  "
       verDoUnboard(a) = {
               "You hop into the air, but alas, gravity's cruel pull drags you down once more.";
       }
       doUnboard(a) = {self.verDoUnboard(a);}
       verDoBoard(a) = {       if (Me.location=self) "You're already on the floor.  "; }
       doBoard(a) = {
               "You hop down to the floor.  ";
               Me.moveInto( self );
       }
       south = { return(study.south); }
       west = { return(study.west); }
       up = {
               "You flap your wings edgily, glancing from desk to sill to shelves to bar,
                       looking for something to hop up onto.  ";
       }
       reachable = [ self self.contents orp aunt red executor sister foggy julia
               desk windowsill couch loveseat deskchair bar shelves]
   outOfPrep = "off of"
   statusPrep = "on"
   mount = "down"
   noexit = {
       "The obvious exit is the study door, to the west, but there's no chance of
               getting that open now.  The southern window looks promising, though.  ";
   }
;

desk: chairitem
       sdesc = "desk"
       ldesc = "Uncle Foggy's desk is a great monolith of mahogany, with drawers of all sizes
               and shapes on virtually every face.  Even though Uncle Foggy did most of his work in
               his lab, the desk's surface is still scarred from his constant tinkering.
               As you know, Uncle Foggy usually kept a carton of assorted parts
               beneath the desk for idle moments.
               Sitting on the center of the desk is a television set.  At one corner, you see
               Uncle Foggy's Super-Bendy Balloon-Animal Balloon Dispenser (pat. pending).
               \bYour eye is inevitably drawn to the massive
               Buffalo-On-A-Spring (pat. pending) hanging heavily far up on on the wall overhead
               which, as you know, is activated by a hidden button on the desk.  "
       noun = 'desk'
       location = study
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor deskchair]
   verDoLookunder(actor) = {}
   doLookunder(actor) = {
       "You don't see anything of interest besides Uncle Foggy's box of junk.  ";
       }
   ischair = nil
   outOfPrep = "off of"
   statusPrep = "on"
       down = self.doUnboard( Me )
       mount = { if (Me.location=studyfloor or Me.location=deskchair) "up"; else "down"; }
;

drawers: fixeditem
       location = desk
       noun = 'drawer' 'drawers'
       sdesc = "drawers"
       ldesc = "Drawers of all sizes and shape fill Uncle Foggy's desk.  "
       verDoLookin(a)={self.verDoOpen(a);}
       verDoOpen(a)={
               if (!global.ischicken)
                       "You feel that now is not the time to go rifling through Uncle Foggy's desk.  ";
               else
                       "Your new body hasn't got the power to open the heavy wooden drawers.  ";
       }
;

tv: fixeditem
       noun = 'tv' 'vcr' 'television'
       sdesc = "television"
       ldesc = {
               "A standard twenty-seven inch screen housed in molded black plastic with an
                       integrated video player.  ";
               switch(global.tvon) {
                       case 0:
                               "It's switched off at the moment.  ";
                               break;
                       case 1:
                               "The screen shows a closeup of Uncle Foggy, looking big as life and only half as dead.  ";
                               break;
                       case 2:
                               "The screen shows Julia Childs performing barbaric ritual desecrations to the
                                       corpses of murdered chickens.  ";
                               break;
               }
       }
       verDoTurnoff(a) = {
               if (!global.ischicken) {
                       if (global.tvon = 0) "It's not on.  ";
                       else "That would be no way to respect Uncle Foggy's memory.  ";
               }
               else "As much as you would love to end Ms. Childs' depredations, the
                       television seems to be chicken-proof.  ";
       }
       verDoTurnon(a) = {
               if (global.tvon = 0) "Dorkings seems to have things under control.  ";
               else "It's already on.  ";
       }
       doSynonym( 'Push' ) = 'Move'
       verDoPush(a) = {
               "The television towers over you like the monolith from 2001.
               My god... it's full of stars!  ";
       }
       location = desk
;

dispenser: fixeditem
       sdesc = "Super-Bendy Balloon-Animal Balloon Dispenser (pat. pending)"
       ldesc = {
               "Uncle Foggy often liked to make elaborate balloon animals for favored visitors,
                       and the Super-Bendy Balloon-Animal Balloon Dispenser (pat. pending) is another of
                       his inventions.  It's in the shape of a small elephant statuette with raised trunk.
                       Super-Bendy Balloon-Animal Balloons (pat. pending) are dispensed from the
                       elephant's open mouth.  Yank out one and another takes its place.  ";
               if (balloon.location<>self)
                       "Sadly, it has dispensed its last Super-Bendy Balloon-Animal Balloon (pat. pending).  ";
       }
       doSynonym( 'Push' ) = 'Move'
       verDoPush(a) = {
               "You put your nose (such as it is) to the grindstone (such as it is) and try to shove the
               dispenser across the desk, but it's just too heavy for you.  ";
       }
       adjective = 'balloon' 'elephant' 'super-bendy' 'super' 'bendy' 'balloon-animal' 'animal'
       noun = 'dispenser' 'elephant' 'statuette'
       location = desk
       verDoTake(a) = {
               if (!global.ischicken) "You're not in the mood to play with balloons just now, though you
                       suspect that Uncle Foggy would've approved of the notion.  ";
               else "The dispenser is too heavy for you to move in your current state.  ";
       }
;

balloon: item
       sdesc = "Super-Bendy Balloon-Animal Balloon (pat. pending)"
       ldesc = {
               "\^<<balloon.thedesc>>, a long, thin balloon of the variety used to make
                       balloon animals, is another of Uncle Foggy's inventions.
                       Uncle Foggy was endlessly fond of making balloon animals for guests, but
                       equally frustrated at their short life-span and tendancy to burst.  So he
                       took vulcanization a step further with Uncle Foggy's Foggyized Super-Bendy
                       Balloon-Animal Balloon Rubber (pat. pending)!  ";
               if (global.b8)
                       "\bCurrently, <<self.thedesc>> is stretched over the tube of the bellows.  ";
               if (global.b4)
                       "Currently, <<self.thedesc>> stretched over one end of <<straw.thedesc>>";
               if (global.b5 and !global.b6) "and jammed into the knot in the windowframe.  ";
               else if (global.b5 and global.b6) "and holding open the window frame.  ";
               if (global.b4 and !global.b5) ".  ";
       }
       adjective = 'super' 'bendy' 'balloon' 'animal'
       noun = 'balloon'
       location = dispenser
       isListed = {
               if(self.location = dispenser) return( nil );
               else return( true );
       }
       verIoRemoveFrom(a)={self.verIoDetachFrom(a);}
       ioRemoveFrom(a,d)={self.ioDetachFrom(a,d);}
       verDoRemoveFrom(a,i)={self.verDoDetachFrom(a,i);}
       verIoDetachFrom(a)={
       }
       ioDetachFrom(a,d)={
               if (d=straw or d=knot) balloon.doTake(a);
               else d.verDoDetachFrom(a,self);
       }
       verDoDetachFrom(a,i)={
               if((i<>bellows and i<>straw and i<>knot) or (i=bellows and !global.b8)
                       or (i=straw and !global.b4) or (i=knot and !global.b5))
                       "\^<<self.thedesc>> isn't attached to <<i.thedesc>>.  ";
               else if (i=straw or i=knot)
                       "Winnie sees you trying to pull the <<straw.sdesc>> from the <<i.thedesc>>
                       and pecks you on the ankle as if to say, \"Don't undo that -
                       we've got to get out of here!\"";
       }
       verDoAttachTo(a,i)={
               if (self.location<>Me and i.location<>Me) {
                       "You're not carrying <<self.thedesc>>";
                       if (i=straw) " or <<i.thedesc>> ";
                       ".  ";
               }
               else self.verIoAttachTo(a);
       }
       verIoAttachTo(a)={
               if (global.b8 or global.b4) "\^<<balloon.thedesc>> is already attached to the
               <<global.b8 ? "bellows" : "Rainbow Wacky Straw (pat. pending)" >>.  ";
       }
       ioAttachTo(a,d)={
               if (d=bellows or d=knot or d=straw) {
                       d.ioAttachTo(a,self);
               }
               else
                       "You're unable to attach <<balloon.thedesc>> to <<d.thedesc>>.  ";
       }
       verDoPutOn( a,i ) = {
               if (i=bellows or i=straw)
                       self.verDoAttachTo(a,i);
               else pass verDoPutOn;
       }
       doPutOn(a,i) = {
               if (i=bellows or i=straw)
                       self.verDoAttachTo(a,i);
               else pass verDoPutOn;
       }
   verIoPutIn( actor ) = {}
   ioPutIn( a,d ) =
   {
       if (d=straw or d=bellows) {
                       outhide(true);
                       self.verIoAttachTo(a);
                       if (outhide(nil))
                               self.verIoAttachTo(a);
                       else
                               self.ioAttachTo(a,d);
       }
       else {
                       outhide(true);
                               d.verDoPutIn( a, self );
                       if (outhide(nil))
                               d.verDoPutIn( a, self );
                       else
                               d.doPutIn( a, self );
               }
   }
       doDrop(a) = {
               if (global.b4) {
                       "\^<<balloon.thedesc>>, attached to one end of
                       <<straw.thedesc>>, slides to the floor of the study.  ";
                       balloon.moveInto( studyfloor );
                       straw.moveInto( studyfloor );
               }
               else pass doDrop;
       }
       doSynonym( 'Take' ) = 'Unwear' 'Detach'
       doTake(a) = {
               if (!global.ischicken) pass doTake;
               else {
                       if (length(Me.contents)>0) global.beakyou;
                       else if (global.b5) {
                               "You tug at <<balloon.thedesc>>,
                               trying to pull it from beneath the window frame.
                               Winnie, following you closely, flaps with agitation, as if to say,
                               \"Don't be a bird brain!  We've got to get out of here!\".  ";
                       }
                       else if (global.b4) {
                               "You snatch <<balloon.thedesc>> and attached <<straw.sdesc>> up in your beak like a
                               long, fat-headed worm.  ";
                               balloon.moveInto( Me );
                               self.moveInto( Me );
                       }
                       else if (global.b8) {
                               "You grab the <<balloon.thedesc>> and yank it off the tube of the bellows.  ";
                               balloon.moveInto( Me );
                               global.b8 := nil;
                       }
                       else {
                               self.taken;
                               self.moveInto( Me );
                       }
               }
       }
       taken = {
               if (self.location=dispenser) "You grab hold of the long, stringy <<balloon.sdesc>>
                       with your beak and pull until it flaps
                       free of the Super-Bendy Balloon-Animal Balloon Dispenser (pat. pending).
                       You discover that it is the last one in the dispenser, something that leaves
                       you with a queer sense of melancholy.  ";
               else "You snatch <<balloon.thedesc>> up in your beak like a tasty worm.  ";
       }
       verDoBreak(a)={
               if (global.b6)
                       "Winnie shakes her head furiously at you as if to say \"Don't even think about it,
                       buster!  \(I'm\) not going on tonight's menu!\"  ";
               else
                       "You can't pop it until it's inflated.  ";
       }
       verDoInflate(a) = {
               if (global.b7) "It's already as inflated as it's going to get.  ";
               else if ((global.b8) or (global.b3 and global.b4))
                       "You don't have the muscle power to squeeze the bellows.
                       You'll have to find another way.  ";
               else "You have no lips and you must blow.  ";
       }
;

deskchair: chairitem
       sdesc = "desk chair"
       ldesc = "It's Uncle Foggy's chair, a comfortable, broad bottomed seat with a carved beech
               frame.  "
       adjective = 'desk'
       noun = 'chair'
       location = study
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor desk]
       down = self.doUnboard( Me )
       mount = { if (Me.location=studyfloor) "up"; else "down"; }
;

gag: fixeditem
       adjective = 'black' 'matte' 'pyramidal' 'ultimate' 'practical' 'super' 'funky'
       noun = 'pyramid' 'joke' 'invention' 'device' 'chickenizer'
       ldesc = "Uncle Foggy's Super Funky Chickenizer (pat. pending) is a matte black pyramid
               with a small switch at its apex.  You dearly hope Uncle Foggy left his development
               notes, or a reversion device, in his lab across the road.  "
       sdesc = "Super Funky Chickenizer (pat. pending)"
       verDoTake(a) = {
               "Whatever it's made of, it's too big and heavy for you to carry in your beak.  ";
       }
       location = nil
;

toggle: fixeditem
       location = gag
       noun = 'switch' 'toggle'
       sdesc = "switch"
       ldesc = "It works flip-flop!  "
       doSynonym( 'Flip' ) = 'Turn' 'Push' 'Pull' 'Kick' 'Scratch' 'Peck' 'Press'
       verDoFlip(a) = {
               "The switch flips over with a hollow 'click' but nothing happens.  For the first time in
                       your life, you curse Uncle Foggy's sense of humor.  You realize there's only one
                       hope.  You have to get outside the house, and across the road to Uncle Foggy's lab.
                       There, you're sure to find some way to reverse the effects of this prank.  ";
       }
;

buffalo: chairitem
       sdesc = "Buffalo-On-A-Spring (pat. pending)"
       ldesc = {
               "The Buffalo-On-A-Spring (pat. pending) is an enormous, furry buffalo head
               with thick horns mounted as far apart as a broad man's shoulders.
               As you know, it rests on a tightly coiled spring, and
               launches forward at the touch of a button hidden on the desk.  Uncle Foggy
               favored using the device on unsolicited salesmen and IRS auditors.  He would seat them
               before the desk, wait until they were deeply engrossed in business, and
               then... \(SPROI-OI-OING\)!  The huge head would lunge towards
               them at high velocity while Uncle Foggy screamed, \"It's still alive!  Run!  For the
               love of God, \(RUN\)!\"  Then he'd cackle hysterically as they tripped over
               themselves in their rush for the door.  Needless to say, victims of this prank
               rarely returned.  ";
               if (global.b1)
                       "\bMounted on the trophy's horns are <<helper.thedesc>>.  ";
       }
       adjective = 'buffalo' 'head' 'buffalo' 'on' 'a' 'trophy'
       noun = 'buffalo' 'head' 'spring' 'Buffalo-On-A-Spring' 'tropy' 'mount'
       location = study
       doSynonym( 'Board' ) = 'Climb' 'Jump'
   outOfPrep = "off of"
   statusPrep = "on"
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor shelves desk deskchair ]
       down = self.doUnboard( Me )
       verIoAttachTo(a)={}
       ioAttachTo(a,d)={
               if (d<>helper) "There's nothing on <<self.thedesc>> to which to attach <<d.thedesc>>.  ";
               else {
                       self.ioPutOn(a,d);
               }
       }
       verIoPutOn(a)={}
       ioPutOn(a,d)={
               if (d<>helper) {
                       "\^<<d.thedesc>> slides off the <<self.thedesc>>, landing on the study floor.  ";
                       d.moveInto( studyfloor );
               }
               else
                       "There's no good surface on the head itself, but you might be able to mount
                       <<d.thedesc>> on the trophy's horns.  ";
       }
       roomDrop( o ) = {
               "\^<<o.thedesc>> slides off the <<self.thedesc>> and falls to the study floor below. ";
               o.moveInto( studyfloor );
       }
;

horns: fixeditem
       sdesc = "buffalo's horns"
       ldesc = "The horns are as thick as a grown man's arms, and even sprout like
               raised arms from the buffalo's broad, massive head.  "
       location = buffalo
       adjective = 'buffalo\'s'
       noun = 'horn' 'horns'
       verIoAttachTo(a)={}
       ioAttachTo(a,d)={self.ioPutOn(a,d);}
       verIoPutOn(a)={}
       ioPutOn(a,d)={
               if (d<>helper) {
                       "\^<<d.thedesc>> slides off the <<self.thedesc>>, landing on the study floor.  ";
                       d.moveInto( studyfloor );
               }
               else {
                       "With Winnie's help, you mount the <<helper.thedesc>> on the horns of the <<buffalo.thedesc>>.  ";
                       helper.moveInto( horns );
                       global.b1 := true;
               }
       }
       doSynonym( 'Board' ) = 'Climb' 'Jump'
       verDoBoard(a)={ "You're already as close to the ceiling as you care to be.  "; }
;

button: buttonitem
       sdesc = "hidden button"
       ldesc = {
               if (Me.location<>desk)
                       "It's hidden out of sight, but you know it's there on the desk.  ";
               else "It's effectively disguised as a knot in the wood of the desk.  ";
       }
       adjective = 'hidden'
       noun = 'button'
       location = desk
       doSynonym( 'Push' ) = 'Peck' 'Kick' 'Press'
       verDoPush(a) = {}
       doPush(a) = {
               //"\b\("; say(global.btot); "\)\b";
               switch(global.btot) {
                       case 0:
                               //No elements in place
                               self.z1;   ".  ";   self.z0;   self.z4;   self.z6;   ".  ";   self.z3;   ".  ";   self.z8;   ".  ";
                               break;
                       case 1:
                               //Only helper in place
                               self.z1;   self.z2;   self.z3;   self.z9;   self.z0;   self.z10;   self.z8;   self.z11;
                               break;
                       case 2:
                               //Bellows in place (+ and other condition), but not helper
                               self.z1;   ".  ";   self.z3;   self.z12;   self.z0;   self.z5;   self.z6;   ".  ";
                               self.z8;   ".  ";
                               break;
                       case 3:
                               //Helper + bellows, but no balloon or straw
                               self.z1;   self.z2;   self.z0;   self.z5;   self.z6;   " ";   self.z13;
                               self.z14;   ".  ";   self.z8;   self.z11;   self.z15;
                               break;
                       case 4:
                               //Helper + bellows connected to straw, no balloon
                               self.z1;   self.z2;   self.z0;   self.z5;   self.z6;   self.z13;   self.z14;
                               self.z16;
                               if (helper.location = Me) {
                                       self.z23;
                                       straw.moveInto( studyfloor );
                               }
                               else self.z17;
                               self.z8;   self.z11;   self.z15;
                               break;
                       case 5:
                               //Helper + bellows + straw + balloon
                               self.z1;   self.z2;   self.z0;   self.z5;   self.z6;   self.z13;   self.z14;
                               self.z16;   self.z18;   self.z19;   self.z22;   self.z8;   self.z11;   self.z15;
                               balloon.moveInto( studyfloor );
                               global.b4 := nil;
                               break;
                       case 6:
                               //Helper + bellows + straw + balloon in knot
                               self.z1;   self.z2;   self.z0;   self.z5;   self.z6;   self.z13;   self.z14;
                               self.z16;   self.z18;   self.z19;   self.z20;   self.z21;   self.z8;   self.z11;   self.z15;
                               global.b6 := true;
                               global.b7 := true;
                               sister.moveInto( windowsill );
                               break;
                       case 7:
                               //Helper + bellows + straw + full balloon in knot
                               "Winnie sees you reaching for the button and raises a frantic squawk, as
                               if to say \"C'mon, you dumb cluck!  We don't have much time before the
                               window closes again!\"  In addition, the furious pounding at the door reminds
                               you of your fate if Mrs. Faverolles catches you in your current state!";
                               break;
                       case 8:
                               //Helper + bellows + balloon
                               self.z1;   self.z2;   self.z0;   self.z5;   self.z6;   self.z13;   self.z14;
                               self.z18;   self.z19;   self.z22;   self.z8;   self.z11;   self.z15;
                               balloon.moveInto( studyfloor );
                               global.b8 := nil;
                               break;
                       default:
                               "No numbers matched.  ";
                               break;
               }
       }
       z0 = { say(global.chickens[rand(length(global.chickens))]); }
       z1 = "The Buffalo-On-A-Spring (pat. pending) zooms off the wall with a resounding
               \(SPROI-OI-OING\)"
       z2 = ", the Hedge Helpers (pat. pending) bouncing crazily behind.  "
       z3 = "The trophy jerks to a sudden stop about three feet off the ground, in front of the desk"
       z4 = ", standing in the center of the room, "
       z5 = ", standing near the bellows, "
       z6 = "leaps with bulging eyes from the path of the charging trophy"
       z7 = "looks up to see the huge trophy head bearing down and leaps out of its path"
       z8 = "A moment later, the head snaps back to the wall"
       z9 = ", while the Hedge Helpers (pat. pending) snap forward and down, reaching nearly
               to the floor.  "
       z10 = ", standing on the spot, receives a powerful goosing from the Hedge Helpers
               (pat. pending) and leaps face first into a nearby piece of furniture.  "
       z11 = ", the Hedge Helpers (pat. pending) whipping insanely behind.  "
       z12 = ", and just above the bellows lying in the middle of the room.  "
       z13 =  " just in time to avoid the whipping Hedge Helpers (pat. pending), which
               latch onto the bellows and give it a good solid squeeze. "
       z14 = "The bellows \(BOOFS\) as the air is forced out of it"
       z15 = " The bellows slowly returns to its original position as air rushes back into it."
       z16 = " and through <<straw.thedesc>>"
       z17 = ", which whips wildly back and forth for a moment before falling still again.  "
       z18 = ", then into the attached <<balloon.sdesc>>, which"
       z19 = " fills with air"
       z20 = ", slowly raising the window a scant chicken's height as it swells.  "
       z21 = "Winnie, seeing your intent, hops onto the windowsill and steps on the mouth of
               <<balloon.thedesc>> to prevent the air escaping it.  "
       z22 = ", but then launches free and sputters across the study before falling to the ground.  "
       z23 = ", which tears itself loose from your grip and whips wildly back and forth for a
               moment before falling still again.  "
;

windowsill: chairitem
       sdesc = "windowsill"
       adjective = 'window'
       noun = 'sill'
       ldesc = {
               if (!global.ischicken) "It's a narrow ledge beneath the window.  ";
               else "It's a ledge beneath the window, easily broad enough for you to stand
                       on in your current form.  ";
       }
       location = study
       doSynonym( 'Board' ) = 'Climb' 'Jump'
       verIoPutOn(a) = {}
       ioPutOn(a,d) = {
               if (d=balloon or d=straw) {
                       "Good thinking, but perhaps a more direct approach would help.  ";
               }
               else "You don't need to put anything on the sill.  ";
       }
   outOfPrep = "off of"
   statusPrep = "on"
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor ]
       down = self.doUnboard( Me )
       south = { return(study.south); }
;

window: fixeditem
       sdesc = "window pane"
       ldesc = {
               "A plain, white-framed, four-panel window that looks out on the front lawn.
                       There's a small knot, about the diameter of your fingertip ";
                       if (global.ischicken) " (the kind you used to have) ";
                       " at the base of the frame where it meets the sill.  ";
               if (global.b6)
                       "\bThe inflated <<balloon.sdesc>> has raised it just about high enough for you
                       to consider escaping, though you don't know how long that will last.  ";
               else if (global.b5)
                       "\bCrammed into the knot is a <<balloon.sdesc>> at the end of <<straw.adesc>>.  ";
       }
       adjective = 'window'
       noun = 'window' 'glass' 'pane' 'panel' 'frame'
       location = windowsill
       verDoLookthru(a) = {
               "Through the bright sunshine streaming in, you see the parked vehicles in
                       Uncle Foggy's front yard, and beyond them, the gate leading to the road.  ";
       }
       verDoOpen(a) = {
               if (!global.ischicken)
                       "You're afraid to disturb the solemn occasion with such a mundane act.  ";
               else if (global.b7)
                       "It's already open, held up by the inflated balloon.  ";
               else self.twins;
       }
       twins = "It's far too heavy too open by chicken power alone, so you motion
               Winnie over, slam your chicken-twin power-rings together and squawk,
               \"Chicken-Twin Power \(ACTIVATE\)!\"  \bOr not.  \b(Hint: that's the puzzle, doofus.)"
       verDoBoard(a)={self.verDoGothru(a);}
       verDoUnboard(a)={self.verDoGothru(a);}
       verDoGothru(a) = {
               if (!global.ischicken)
                       "Crawling through the window just doesn't appeal
                       like it once did when you and Winnie were kids.  ";
               else if (!global.b7)
                       self.twins;
       }
       doGothru(a) = {
                       study.escape;
                       unnotify(global, #recipelist);
                       fox.moveInto( outside );
                       Me.moveInto( outside );
                       sister.moveInto( outside );
                       outside.lookAround( true );
       }
;

knot: fixeditem, container
       sdesc = "knot"
       ldesc = {
               "It's a small knot just at the very bottom of the frame, about large enough to
               allow a pencil or a pinky finger between the frame and the sill.  ";
               if (global.b6)
                       "The inflated <<balloon.sdesc>> you inserted in
                       the knot has raised the window just about high enough for you to consider escaping.  ";
               else if (global.b5)
                       "Crammed into the knot is a <<balloon.sdesc>> at the end of <<straw.adesc>>.  ";
       }
       noun = 'knot' 'hole'
       isqcontainer = true
       location = windowsill
       verIoPutIn(a) = {self.verIoAttachTo(a);}
       ioPutIn(a,d) = {self.ioAttachTo(a,d);}
       verIoRemoveFrom(a)={self.verIoDetachFrom(a);}
       ioRemoveFrom(a,d)={self.ioDetachFrom(a,d);}
       verIoDetachFrom(a)={
       }
       ioDetachFrom(a,d)={
               if (d=balloon) balloon.doTake(a);
               else d.verDoDetachFrom(a,self);
       }
       verIoAttachTo(a)={
               if (global.b5) "The knot already contains a <<balloon.sdesc>>.  ";
       }
       ioAttachTo(a,d)={
               if (d<>balloon and d<>straw) "You can't get <<d.thedesc>> into the knot.  ";
               else if ((d=balloon or d=straw) and global.b4) {
                       "You cram the balloon-covered end of <<straw.thedesc>>
                               into the knot, then, gripping it with your beak, shove <<balloon.thedesc>>
                               as far into the knot as you can.  ";
                       global.b5 := true;
                       balloon.moveInto( knot );
                       if (global.b3)
                               straw.moveInto( studyfloor );
                       windowsill.reachable := windowsill.reachable + [straw];
               }
               else if (d=balloon) {
                       "You try to cram <<balloon.thedesc>> into
                       the knot, but your current anatomical facilities lack any method (i.e. fingers)
                       of pushing things into deep, narrow holes, being rather more suited to pulling
                       things out of deep, narrow holes.  ";
               }
               else if (d=straw) {
                       "You slide one end of <<straw.thedesc>> into the knot in
                       the frame.  Unfortunately, it's a loose fit, and <<straw.thedesc>> slides out.  ";
               }
       }
;

fireplace: fixeditem
       sdesc = "fireplace"
       ldesc = {
               "You and Winnie used to spend many cold days bundled up by the charming old
               brick fireplace, with good books and hot chocolate, the latter preferably drunken
               through one of Uncle Foggy's Wacky Rainbow Straws (pat. pending).  Standing to one
               side of the fireplace is an assortment of brass pokers";
               if (!global.b2)
                       " and an old bellows";
               ".  ";
       }
       noun = 'fireplace'
       location = studyfloor
       doSynonym( 'Board' ) = 'Climb' 'Enter'
       verDoBoard(a) = {
               if (!global.ischicken)
                       "Though you and Winnie often tried to climb the sooty chimney, the idea no longer
                       holds much interest for you.  ";
               else
                       "You try to hop from brick to brick up the chimney shaft, but find too few good
                       toe holds, and flop back down to the study floor.  ";
       }
       verDoPutIn(a,i) = {
               "You're not in the mood for pyromania today.  ";
       }
;

pokers: fixeditem
       sdesc = "pokers"
       ldesc = {
               "A variety of brass implements for tending fires stands upright by the fireplace.  ";
               if (!global.b2)
                       "Among them stands an old bellows.  ";
       }
       noun = 'pokers' 'poker'
       location = studyfloor
;

bellows: item
       sdesc = "bellows"
       ldesc = {
               "It's an ordinary bellows, ";
               if (!global.b2)
                       "standing on end among the pokers by the fireplace";
               else "lying in the middle of the room in front of Uncle Foggy's desk";
               ".  Two bits of tapered wood
               are joined by an accordion-like sleeve.  Pulling the handle out fills it with air;
               squeezing them together expels the air.  You and Winnie used to use enjoy using this
               particular bellows to inflate Uncle Foggy's Super-Bendy Balloon-Animal Balloons
               (pat. pending).  ";
               if (global.b3) "\bAttached to the tube of the bellows is one of Uncle Foggy's
                       Rainbow Wacky Straws (pat. pending).  ";
               else if (global.b8) "\bAttached to the tube of the bellows is one of Uncle Foggy's
                       Super-Bendy Balloon-Animal Balloons (pat. pending).  ";
       }
       doSynonym( 'Squeeze' ) = 'Inflate' 'Deflate'
       verDoSqueeze(a)={
               if (!global.ischicken)
                       "Though you and Winnie used to have fun inflating balloons with it,
                               now is not the time.  ";
               else
                       "As a chicken, you don't have the muscle (or the hands, for that matter)
                               to squeeze the bellows.  Oh, if only you had hands again!  ";
       }
       noun = 'bellows' 'tube' 'handle'
       location = studyfloor
       isListed = {
               if(!global.b2) return( nil );
               else return( true );
       }
       doSynonym( 'Move' ) = 'Push' 'Take' 'Pull' 'Turn'
       verDoMove(a) = {}
       doMove(a) = {
               if (!global.ischicken)
                       "Though blowing up Uncle Foggy's Super-Bendy Balloon-Animal Balloons (pat. pending)
                               with the bellows used to provide you and Winnie hours
                               of amusement, you just don't have the heart for it given the current circumstances.  ";
               else {
                       if (!global.b2) {
                               "Realizing that you can't use the bellows in its current position, you try to
                                       topple it from its upright position by the fireplace.  It budges, but just barely.
                                       Winnie, comprehending your efforts, lends a beak to assist.  Working together,
                                       you manage to pull the bellows down to the ground and drag it to the center of
                                       the room.  ";
                               global.b2 := true;
                       }
                       else "Winnie gives you a light peck as if to say \"Don't be a little chicken shit.
                               I'm not helping you move \(that\) again.\"  ";
               }
       }
       verIoRemoveFrom(a)={self.verIoDetachFrom(a);}
       ioRemoveFrom(a,d)={self.ioDetachFrom(a,d);}
       verIoDetachFrom(a)={
       }
       ioDetachFrom(a,d)={
               if (d=balloon) balloon.doTake(a);
               else d.verDoDetachFrom(a,self);
       }
       verDoAttachTo(a,i)={self.verIoAttachTo(a);}
       verIoAttachTo(a)={
               if (!global.b2)
                       "The bellows is standing vertically on its handles, putting the tube
                       slightly out of easy reach.  ";
               else if (global.b3 or global.b8)
                       "The <<global.b3 ? "Rainbow Wacky Straw (pat. pending)" :
                       "Super-Bendy Balloon-Animal Balloon (pat. pending)" >>
                       is already attached to the bellows.  ";
       }
       ioAttachTo(a,d)={
               if (d=straw) {
                       "You hold the straw firmly in beak and cram it as far into the tube of the bellows
                       as it will go.  The straw fits snugly inside the tube, forming a solid connection.  ";
                       global.b3 := true;
                       if (global.b5)
                               straw.moveInto( studyfloor );
               }
               else if (d=balloon) {
                       "You slide the mouth of <<balloon.thedesc>> over the tube of the bellows.  ";
                       balloon.moveInto(bellows);
                       global.b8 := true;
               }
               else "You can't attach <<d.thedesc>> to the bellows.  ";
       }
   verIoPutIn( actor ) = {}
   ioPutIn( a,d ) =
   {
       if (d=straw) {
                       outhide(true);
                       self.verIoAttachTo(a);
                       if (outhide(nil))
                               self.verIoAttachTo(a);
                       else
                               self.ioAttachTo(a,d);
       }
       else {
                       outhide(true);
                               d.verDoPutIn( a, self );
                       if (outhide(nil))
                               d.verDoPutIn( a, self );
                       else
                               d.doPutIn( a, self );
               }
   }
   verIoPutOn( actor ) = {}
   ioPutOn( a,d ) =
   {
       if (d=balloon) {
                       outhide(true);
                       self.verIoAttachTo(a);
                       if (outhide(nil))
                               self.verIoAttachTo(a);
                       else
                               self.ioAttachTo(a,d);
       }
       else {
                       outhide(true);
                               d.verDoPutOn( a, self );
                       if (outhide(nil))
                               d.verDoPutOn( a, self );
                       else
                               d.doPutOn( a, self );
               }
   }
;

helper: item
       sdesc = "Hedge Helpers (pat. pending)"
       adesc = self.thedesc
       ldesc = {
               "The Hedge Helpers (pat. pending) extend a gardener's reach while trimming
               tall hedges.  They clamp on to the shoulders at one end, and end in a pair of
               articulated rubber hands at the other.  The hands operate a second pair of shears,
               mimicking the operator's own hands, doubling both his reach and his efficiency.
               \bThe Hedge Helpers (pat. pending) are another of Uncle Foggy's inventions.
               Being the recluse he was, he liked his hedges TALL.  ";
               if (global.b1) "Currently, they're dangling from the horns of the
                       Buffalo-On-A-Spring (pat. pending) on the wall above the desk.  ";
       }
       adjective = 'hedge'
       noun = 'helper' 'helpers'
       location = box
       verDoExtend(a)={
               "They were meant to be worn on human shoulders. It's unlikely that you could
                       extend them in your current form. ";
       }
       verDoWear(a)={"\^<<self.thedesc>> weren't designed to mount on small fowl.  ";}
       verDoPutOn(a,i)={
               if (isclass(i,Actor)) self.verDoWear(a);
       }
       verDoAttachTo(a,i) = {
               if (i=buffalo) "You might have better luck attaching it to the trophy's horns.  ";
               else if (i<>horns) "There's no good way to mount it to <<i.thedesc>>.  ";
               else if (isclass(i,Actor)) self.verDoWear(a);
       }
       doTake(a) = {
               if (length(Me.contents)>0) "You can only carry one thing at a time in your beak.  ";
               else if (global.b1)
                       "Winnie sees you headed on a course to pull down the Hedge Helpers (pat. pending)
                       and starts up an agitated flapping, as if to say \"Don't even think about it, egg
                       head.  We've got to get out of here!\"";
               else {
                       "You snatch an end of the Hedge Helpers (pat. pending) up in your beak.  Though
                       quite bulky, they're light enough that you can drag them around single... er... beakedly.  ";
                       helper.moveInto( Me );
               }
       }
;

box: fixeditem, openable
       sdesc = "carton"
       ldesc = {
               "The greasy, worn carton was Uncle Foggy's hobby box - full of spare bits and
                       pieces and small works in progress.  ";
               if(self.isopen) {
                       if (length(self.contents)>1) {
                               "Uncle Foggy's box contains ";
                               listcont( self ); ". ";
                       }
               }
               else "The grubby flaps are closed, hiding whatever stray parts Uncle Foggy left behind.  ";
       }
       noun = 'carton' 'box'
       location = studyfloor
       isopen = nil
;

parts: fixeditem
       location = box
       sdesc = "miscellaneous parts and pieces"
       adesc = self.thedesc
       adjective = 'crack' 'monkey'
       noun = 'parts' 'pieces' 'crack' 'crackpipe' 'pipe' 'butler' 'corn'
       ldesc = {
               "The greasy box contains an amazing jumble of parts and pieces of things Uncle
               Foggy was working on.  ";
               if (helper.location = box)
                       "The only thing among them that looks to be of any immediate use is the set of
                       Hedge Helpers (pat. pending).  ";
       }
       verDoTake(a) = {"You don't see anything of any use in there.  ";}
;

bar: chairitem
       sdesc = "bar"
       ldesc = {
               "Though not a habitual drinker, Uncle Foggy always kept a stocked bar.  As kids, you
                       and Winnie often had fun sneaking olives and maraschino cherries.  However, it
                       looks like all of the condiments, along with the booze and glasses, have been
                       locked away.  ";
               if (straw.location = bar)
                       "\bLying on the surface of the bar is one of Uncle Foggy's Rainbow Wacky Straws
                               (pat. pending).  ";
       }
       noun = 'bar'
       location = study
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor]
   ischair = nil
   outOfPrep = "off of"
   statusPrep = "on"
       down = self.doUnboard( Me )
       verDoOpen(a)={
               "It's been locked up, presumably by Mr. Dorkings to prevent the help from helping themselves.  ";
       }
;

straw: item
       sdesc = "Rainbow Wacky Straw (pat. pending)"
       ldesc = {
               "Another of Uncle Foggy's inventions, <<straw.thedesc>>
               was developed with you and Winnie in mind.  It's a ludicrously long flexible straw that
               randomly changes the color of liquids that pass through it.  You and Winnie used to
               enjoy drinking Shirley Temples from across the room, watching as <<straw.thedesc>>
               turned the drink from cherry cola red to lime rickey green to tang orange.  ";
               if (global.b3) "\bOne end of <<straw.thedesc>> is inserted into the bellows";
               if (global.b3 and global.b4) ", while the other ";
               if (global.b3 and !global.b4) ".  ";
               if (global.b4 and !global.b3) "\bOne end of <<straw.thedesc>> ";
               if (global.b4) "is inserted into <<balloon.thedesc>>";
               if (global.b5) " and crammed into the knot in the window";
               if (global.b4 or global.b5) ".  ";
       }
       adjective = 'rainbow' 'wacky'
       noun = 'straw'
       location = bar
       isListed = {
               if(self.location = bar) return( nil );
               else return( true );
       }
       verIoRemoveFrom(a)={self.verIoDetachFrom(a);}
       ioRemoveFrom(a,d)={self.ioDetachFrom(a,d);}
       verDoRemoveFrom(a,i)={self.verDoDetachFrom(a,i);}
       verIoDetachFrom(a)={
       }
       ioDetachFrom(a,d)={
               if (d=balloon) balloon.doTake(a);
               else d.verDoDetachFrom(a,self);
       }
       verDoDetachFrom(a,i)={
               if((i<>bellows and i<>balloon and i<>knot) or (i=bellows and !global.b3)
                       or (i=balloon and !global.b4) or (i=knot and !global.b5))
                       "\^<<self.thedesc>> isn't attached to <<i.thedesc>>.  ";
               else if (i=bellows or i=straw or i=knot)
                       "Winnie sees you trying to pull the <<straw.sdesc>> from the <<i.thedesc>>
                       and pecks you on the ankle as if to say, \"Don't undo that -
                       we've got to get out of here!\"";
       }
       verDoAttachTo(a,i)={
               if (self.location<>Me and i.location<>Me) {
                       "You're not carrying <<self.thedesc>>";
                       if (i=balloon) " or <<i.thedesc>>";
                       ".  ";
               }
               else self.verIoAttachTo(a);
       }
       verIoAttachTo(a)={
               if (global.b3 and global.b5)
                       "\^<<straw.thedesc>> is already attached to the bellows
                       at one end and <<balloon.thedesc>> at the other.  ";
       }
       ioAttachTo(a,d)={
               if (d= bellows or d=knot)
                       d.ioAttachTo(a,self);
               else if (d=balloon) {
                       "You slide the mouth of <<balloon.thedesc>> over
                               <<straw.thedesc>>.  ";
                       global.b4 := true;
                       if (straw.location = Me or balloon.location = Me) {
                               balloon.moveInto( Me );
                               straw.moveInto( Me );
                       }
               }
               else "You're unable to attach <<straw.thedesc>> to <<d.thedesc>>.  ";
       }
   verIoPutOn( actor ) = {}
   ioPutOn( a,d ) =
   {
       if (d=balloon) {
                       outhide(true);
                       self.verIoAttachTo(a);
                       if (outhide(nil))
                               self.verIoAttachTo(a);
                       else
                               self.ioAttachTo(a,d);
       }
       else {
                       outhide(true);
                               d.verDoPutOn( a, self );
                       if (outhide(nil))
                               d.verDoPutOn( a, self );
                       else
                               d.doPutOn( a, self );
               }
   }
       verDoPutIn( a,i ) = {
               if (i=bellows or i=balloon)
                       self.verDoAttachTo(a,i);
               else pass verDoPutIn;
       }
       doPutIn(a,i) = {
               if (i=bellows or i=balloon)
                       self.verDoAttachTo(a,i);
               else pass verDoPutIn;
       }
       doDrop(a)={
               "\^<<straw.thedesc>> slides ";
               if (Me.location.location and Me.location<>studyfloor)
                       "off <<Me.location.thedesc>> ";
               "to the study floor.  ";
               straw.moveInto(studyfloor);
               if (global.b4 and !global.b5)
                       balloon.moveInto(studyfloor);
       }
       doSynonym( 'Take' ) = 'Unwear' 'Detach'
       doTake(a) = {
               if (!global.ischicken) pass doTake;
               else {
                       if (length(Me.contents)>0) global.beakyou;
                       else if (!global.b4) {
                               self.taken;
                               straw.moveInto( Me );
                       }
                       else if (global.b4 and !global.b5) {
                               "You snatch <<straw.thedesc>> and attached
                               <<balloon.sdesc>> up in your beak like a
                               long, fat-headed worm.  ";
                               self.moveInto( Me );
                               balloon.moveInto( Me );
                       }
                       else if (global.b3 and global.b5) {
                               "You tug at <<balloon.thedesc>>,
                               attempting to dislodge it from the bellows or the knot.
                               Winnie, following you closely, flaps with agitation, as if to say,
                               \"Don't be a bird brain!  We've got to get out of here!\".  ";
                       }
                       else {
                               self.taken;
                               self.moveInto( Me );
                       }
               }
       }
       taken = "You snatch <<straw.thedesc>> up in your beak like
               a long wriggly worm.  "
;

shelves: chairitem
       sdesc = "shelves"
       ldesc = "Tall wooden shelves tower over Uncle Foggy's desk on either side, drawing
               attention to the Buffalo-On-A-Spring (pat. pending), mounted prominently on the wall
               between them.  The shelves are crammed with books of all ages and subjects, though
               there's probably little on them that hasn't been read by you or Winnie.  "
       adjective = 'book'
       noun = 'shelf' 'shelves' 'bookshelves' 'bookshelf'
       location = study
       doSynonym( 'Board' ) = 'Climb' 'Jump'
   outOfPrep = "off of"
   statusPrep = "on"
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor buffalo desk deskchair]
       mount = { if (Me.location=studyfloor) "up"; else "down"; }
       down = self.doUnboard( Me )
       verDoBoard(a) = {}
       doBoard(a) = {
               if (!global.ischicken)
                       "Maybe when you were kids, but you and Winnie are far too big for that now.  ";
               else {
                       if (helper.location = Me) {
                               "With one of the light-weight Hedge Helper (pat. pending) hands clutched in your
                                       beak, you attempt to
                                       climb the tall bookshelf, without much progress.  Winnie, seeing your plan,
                                       beaks down on the other hand and mounts alongside you.  Between you both,
                                       you're able, slowly, laboriously, to climb the bookshelves with the Hedge
                                       Helpers (pat. pending).  At last you reach the top, even with the
                                       Buffalo-On-A-Spring (pat. pending).  ";
                               Me.moveInto(shelves);
                       }
                       else
                               "You slowly, laboriously climb the bookshelf, one shelf at a time, claw over
                                       beak over claw.  Eventually you reach the top.  You look around and find yourself
                                       at a level with the Buffalo-On-A-Spring (pat. pending).  ";
                               Me.moveInto(shelves);
               }
       }
;

books: fixeditem
       sdesc = "books"
       ldesc = "The shelves are packed with numerous books in a wide variety of subjects.
               Between you and Winnie, you've probably read most of them.  "
       noun = 'book' 'books'
       doSynonym( 'Take' ) = 'Read' 'Search'
       verDoTake(a) = {
               if (!global.ischicken) "Now's not the time to be browsing Uncle Foggy's library.  ";
               else "Oh no!  You seem to have lost your ability to read!  All the writing on the books'
                       spines looks like chicken scratch!  ";
       }
       location = shelves
;

loveseat: chairitem
       location = study
       adjective = 'love'
       noun = 'loveseat' 'seat'
       sdesc = "love seat"
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor]
       ldesc = "The love seat is upholstered in plush, overstuffed, Corinthian leather.
               Quien es mas macho?  "
       noexit = "It would be disrespectful to go wandering before the reading is over.  "
       verDoUnboard(a) = { if (!global.ischicken) self.noexit; }
       roomAction( actor, v, d, prep, io ) = {
               if ((v=standVerb or v=outVerb or v=standVerb) and !global.ischicken) { self.noexit; exit; }
               else pass roomAction;
       }
       down = {
               if (global.ischicken) self.doUnboard( Me );
               else self.noexit;
       }
;

couch: chairitem
       sdesc = "couch"
       ldesc = "The sofa is a comfortably worn leather affair, part of a matched set with
               the loveseat.  "
       noun = 'couch' 'sofa'
       location = study
   outOfPrep = "off of"
   statusPrep = "on"
       reachable = [ self orp aunt red executor sister foggy julia self.contents studyfloor]
       down = self.doUnboard( Me )
;

vocabulary: thing
       noun = 'chicken' 'chickens'
       location = nil
;

/*
-actors:thing;
*/

executor: Actor
       isListed = nil
       adjective = 'Mr.'
       noun = 'dorkings' 'executor'
       sdesc = "Mr. Dorkings"
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "Dorkings was Uncle Foggy's solicitor.  A dour man in black who rarely smiles,
               you've never quite trusted him.  "
       cdesc = "Dorkings was a dour looking man in black.  Now he's a dour looking black chicken.
               And those beady eyes don't make him look any more trustworthy.  "
       havow = "Mr. Dorkings looks at you with disapproving eyes.  You know he's never liked
               you and Winnie.  "
       location = foyer
       verDoFollow( a ) = {
               if (!global.ischicken and Me.location=outside)
                       "";
               else pass doFollow;
       }
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
;

foggy: fixeditem
       isListed = nil
       adjective = 'uncle'
       noun = 'fogarth' 'foggy' 'Barnevelder'
       sdesc = "Uncle Foggy"
       ldesc = "The closeup image of Uncle Foggy's face on the television floats just about
               where it would be if he were still sitting at his desk, creating an eerie warping of reality.  "
       //cdesc = self.hdesc
       location = nil
       disavow = "Your grief must be getting to you.  Get a grip.
               Uncle Foggy is just an image on the television.  "
;

red: Actor
       isListed = nil
       adjective = 'cousin'
       noun = 'Reginald' 'Red' 'Reggie' 'Barnevelder'
       sdesc = "Red"
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "Your cousin Reginald 'Red' Barnevelder is a scrawny red-headed jerk.  Ever since
               you were children, he's always lorded it over you and Winnie.  "
       cdesc = "Cousin Red was a scrawny, red-headed human.  Now he's a scrawny, thin-necked
               rooster with a floppy red comb.  "
   havow = "\"HAH hah!  We're going to get everything, and you're going to get nothing!
       So don't try sucking up to me, 'cause it won't work!\""
       location = outside
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
;

orp: Actor
       isListed = nil
       adjective = 'uncle' 'Mr.'
       noun = 'Orpington' 'Barnevelder'
       sdesc = "Uncle Orpington"
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "Your Uncle Orpington is a big, blustery man prone to sudden outbursts and
               disapproving tirades.  The only time you can recall ever seeing him happy was while
               reminiscing about some of Uncle Foggy's failed experiments.  "
       cdesc = "Uncle Orpington makes for a big, bullish rooster, the cock of the walk.  "
   havow = "Uncle Orpington snorts in apparent disgust.  \"You gold-digging
       little brats.  You'll get nothing.\"  "
       location = outside
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
;

aunt: Actor
       isListed = nil
       adjective = 'aunt' 'Mrs.'
       noun = 'Lamona' 'Barnevelder'
       sdesc = "Aunt Lamona"
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "Your Aunt Lamona wears a high collar and a pinched expression over a plain
               woolen dress.  She's always held your side of the family at a distance with her
               snobbishly aristocratic values.  "
       cdesc = "Aunt Lamona makes for a stringy looking hen.  You're willing to bet she's all
               gristle.  "
   havow = "Aunt Lamona sniffs at you and looks away haughtily.  She's never had any
       use for your side of the family, and Uncle Foggy's death hasn't changed that.  "
       location = outside
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
;

barnevelders: Actor, floatingItem
       isplural = true
       noun = 'barnevelders'
       sdesc = "the Barnevelders"
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "The Rhode Island Barnevelders are a pompous, arrogant looking group.  "
       cdesc = "The Rhode Island Barnevelders make for a panicky looking group of chickens.  "
       locationOK = true
       location = {return(orp.location);}
   havow = "\^<<self.sdesc>> look at you with a cumulative sneer that suggests they
       have nothing to say to you.  "
   cavow = "\^<<self.sdesc>> have even less to say to you now than they did before.  "
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
;

sister: Actor
       isListed = nil
       adjective = 'twin' 'sister'
       noun = 'sister' 'Winnie' 'Wyandotte'
       sdesc = "Winnie"
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "Your sister Wyandotte 'Winnie' Langshan has been your steady companion since
               birth.  The two of you have never been separated, and share an almost psychic bond.  "
       cdesc = "Though outwardly Winnie looks like a coquettish young hen, you can still sense
               the calm intelligence and wry humor beneath that feathered skin.  "
       location = outside
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
       hignore = "<<self.sdesc>> spares you a sympathetic glance, but she's lost in her own thoughts right now.  "
       cignore = "You let out an unintelligible squawk, failing to communicate your order.  "
   havow = "\^<<self.sdesc>> glances at you with a sympathetic smile, but fails to say
       anything.  She's lost in her own memories of Uncle Foggy, as you know all too well.  "
   cavow = "\^<<self.sdesc>> is unable to speak, but you nonetheless sense the warm
       intelligence behind those beady eyes.  "
;

julia: fixeditem
       isListed = nil
       adjective = 'Julia'
       noun = 'Childs' 'Julia'
       sdesc = "Julia Childs"
       ldesc = "Julia Childs chirps cheerfully as she performs unspeakable mutilations to deceased fowl.  "
       //cdesc = self.hdesc
       location = nil
       disavow = "Get real.  Julia Childs is just an image on the television.  "
;

cook: Actor
       isListed = nil
       adjective = 'Mrs.'
       noun = 'Faverolles' 'cook'
       sdesc = "Mrs. Faverolles"
       ldesc = "Mrs. Faverolles is a short, squat, troll-like woman stuffed into a tightly fitted
               white chef's uniform.  Mrs. Faverolles is notorious for her mercurial temper, which
               often leads to screaming paroxysms of incomprehensible French.  "
       cdesc = self.hdesc
       location = study
       actorAction( v, d, p, i ) = { if (!global.ischicken) self.hignore; else self.cignore; exit; }
;

saucepan: fixeditem
       location = cook
       adjective = 'sauce'
       noun = 'sauce' 'pan' 'saucepan'
       sdesc = "sauce pan"
       ldesc = "It's full of some rich, burgundy colored sauce.  "
;

spoon: fixeditem
       location = cook
       noun = 'spoon'
       sdesc = "spoon"
       ldesc = "A wooden spoon, apparently used for stirring sauce.  "
;

/*
-objects:thing;
*/

replace scoreStatus: function( ) {
       //setscore( cvtstr(global.score) + ' out of 14' );
       setscore ('');
}

replace terminate: function
{
       "Thank you for playing the demo version of \(Foggywood Hijinx\), a
       TextFeather release.  On-line registration for TextFeather products
       will be available at http://www.textfeather.com on or before
       June 30, 1998.  Thanks for your patience!";
}

class intangible: fixeditem
       errmsg = "You can't do that with <<self.thedesc>>.  "
       doverbs = [ inspectVerb ]
       dobjGen(a, v, i, p) = {
               if (find(self.doverbs,v) = nil) {
                       self.errmsg;
                       exit;
               }
       }
       iobjGen(a, v, d, p) = {
               self.dobjGen(a, v, d, p);
       }
;


modify Me
       ldesc = {
               if (!global.ischicken) "You look about the same as always.  ";
               else "You make a tasty looking chicken.  ";
       }
;

modify thing
       verDoSmell(a) = "You smell nothing unusual.  "
       verDoListen(a) = "You hear nothing unusual.  "
       verDoPeck(a) = {
               if (!global.ischicken) "Uncle Foggy's death must be getting to you worse than you realized.  ";
               else "You dart forward and give <<self.thedesc>> a frustrated little peck.  ";
       }
       verDoKick(a) = {
               if (!global.ischicken) "Uncle Foggy's death must be getting to you worse than you realized.  ";
               else "You dart forward and give <<self.thedesc>> a frustrated little kick.  ";
       }
       verDoSteal(a) = {
               if (!global.ischicken) "Please try to control yourself until AFTER the reading of the will.  ";
               else "You don't make a very good cat, er, chicken burglar.  ";
       }
;

modify Actor
       thedesc = self.sdesc
       adesc = self.sdesc
       ldesc = { if (!global.ischicken) self.hdesc; else self.cdesc; }
       hdesc = "A human being."
       cdesc = "A chicken."
       verDoTalk( a ) = {self.disavow;}
   disavow = {
       if (!global.ischicken) self.havow;
       else self.cavow;
   }
       havow = "Apparently, \^<<self.sdesc>> has nothing to say to you.  "
   cavow = { "\^<<self.sdesc>> the chicken has even less to say to you than
       <<self.sdesc>> the human being.  "; }
       hignore = "<<self.sdesc>> sneers at you unpleasantly.  "
       cignore = "You let out an unintelligible squawk, failing to communicate your order.  "
   verIoSayTo( actor ) = {}
       ioSayTo( actor, v ) = { self.disavow; }
   verDoAttack(a) = { "Tempting, but not helpful.  "; }
   verDoKick(a) = { self.verDoAttack(a); }
   verDoPeck(a) = { self.verDoAttack(a); }
   verDoEat(a) = {
       if (!global.ischicken)
               "Uncle Foggy didn't raise you to be a cannibal.  ";
       else
               "Mmm, tastes just like chicken.  ";
   }
;

modify room
       hverbs = [ askVerb sayVerb tellVerb yellVerb helloVerb ]
       cverbs = [ peckVerb squawkVerb flapVerb ]
       roomAction( actor, v, d, prep, io ) = {
               if (global.ischicken and find(self.hverbs,v)<>nil) {
                       "You squawk something unintelligible.
                               It's no wonder Winnie always tells you to shut your beak!";
                       exit;
               }
               else if (!global.ischicken and find(self.cverbs,v)<>nil) {
                       "Don't be a dumb cluck.  What do you think you are, a chicken?  ";
                       exit;
               }
               else {
                       pass roomAction;
               }
       }
;

towardPrep: Prep
   preposition = 'toward' 'towards'
   sdesc = "toward"
;

modify basicStrObj
       verDoSayTo( actor, io ) = {}
       verDoSay( actor ) = {}
       doSay( actor ) = {
               "You say \"";say( self.value ); "\".  ";
       }
;

/*
-verbs:thing;
*/

xyzzyverb: sysverb
 verb = 'xyzzy'
 sdesc = "xyzzy"
 action(actor) = {
               if (global.ischicken)
                       "\bWith a mighty 'psquaAWK', you squeeze out an egg!  Sadly it lands on the hard
                       cold ground, where it meets an untimely demise.  ";
               else
                       "A hollow voice says, \"Hey, didn't I see you on the MUD last night?\"";
               abort;
 }
;

aboutVerb: sysverb
       verb = 'about'
       sdesc = "about"
       action(a) = {
                       "TextFeather is pleased to present \(Foggywood Hijinx\) a game hen, by Ivan Cockrum.
                       \b
                       About the author:
                       \b
                       Ivan \"Henny\" Cockrum grew up on a chicken ranch in northern Montana.  As a young
                       boy, Ivan spent so much time around poultry that for a long time he thought he \(was\)
                       a chicken.  That is, until the Great Thanksgiving Day Beheading of '57, which provided a
                       dramatic lesson in applied Darwinism to innocent young Ivan.  Now, Ivan is a chicken
                       rancher himself and a
                       fanatical proponent of game hens, which is why he proudly presents this game of
                       \(Foggywood Hijinx\).
                       \b
                       Please direct comments or questions to [email protected].
                       \b
                       \(Foggywood Hijinx\) was beta tested and catered by
                       Chad Hernandez, Christopher Huang, Christopher Klimas, and Dan Shiovitz.
                       \b
                       About TextFeather:
                       \b
                       TextFeather, Inc. is a partnership of chicken ranchers formed for the
                       purpose of providing quality works of interactive game hen to
                       a worldwide community of players, hobbyists, and
                       chicken fetishists.  Help support our efforts to keep interactive
                       game hens alive!
               ";
               abort;
       }
       doAction = 'About'
;

/*hintVerb: deepverb
       verb = 'hint' 'help' 'hints'
       sdesc = "hint"
       action(a) = {
               "Hints are available with the full registered version of \(Foggywood Hijinx\).
               Type REGISTER for additional information.  ";
       }
;
*/
regsterVerb: deepverb
       verb = 'register'
       sdesc = "register"
       action(a) = {
               "On-line registration for TextFeather products will be available
               at http://www.textfeather.com on or before June 30, 1998.  Thanks for your patience!  ";
       }
;

smellVerb: deepverb
       verb = 'smell' 'sniff'
       sdesc = "smell"
       action(actor) =
       {
               if (global.ischicken)
                 "Your incredible chicken sense of smell detects nothing unusual.  ";
               else
                       "You smell nothing out of the ordinary.";
       }
       doAction = 'Smell'
;

listenVerb: deepverb
       verb = 'listen'
       sdesc = "listen"
       action(actor) =
       {
               if (global.ischicken)
                 "Your super-keen chicken hearing detects nothing unusual.  ";
               else
                       "You hear nothing out of the ordinary.";
       }
       doAction = 'Listen'
;

knockVerb: deepverb
       verb = 'knock'
       sdesc = "knock"
       doAction = 'Knock'
;

squawkVerb: deepverb
       verb = 'squawk' 'peep' 'cheep' 'chirp' 'crow'
       sdesc = "squawk"
       action(actor) = {
               "You rear back, flap your wings, and let loose with a loud \(PSQUAWK\)!  ";
       }
;

flapVerb: deepverb
       verb = 'flap' 'fly'
       sdesc = "flap"
       action(actor) = {
               "You flap your wings furiously.  The feathers fly, but sadly, you don't.  ";
       }
;

goBehindVerb: deepverb
   verb = 'go behind'
   sdesc = "go behind"
   doAction = 'Gobehind'
;

goThruVerb: deepverb
   verb = 'go through' 'go thru'
   sdesc = "go through"
   doAction = 'Gothru'
;

goUnderVerb: deepverb
   verb = 'go under' 'go beneath'
   sdesc = "go under"
   doAction = 'Gounder'
;

kickVerb: deepverb
       verb = 'kick' 'claw' 'scratch'
       sdesc = "kick"
       doAction = 'Kick'
;

peckVerb: deepverb
       verb = 'peck'
       sdesc = "peck"
       doAction = 'Peck'
;

driveVerb: deepverb
       verb = 'drive'
       sdesc = "drive"
       doAction = 'Drive'
;

stealVerb: deepverb
       verb = 'steal'
       sdesc = "steal"
       doAction = 'Steal'
;

squeezeVerb: deepverb
       verb = 'squeeze'
       sdesc = "squeeze"
       doAction = 'Squeeze'
;

inflateVerb: deepverb
       verb = 'inflate' 'blow up'
       sdesc = "inflate"
       doAction = 'Inflate'
;

deflateVerb: deepverb
       verb = 'deflate'
       sdesc = "deflate"
       doAction = 'Deflate'
;

pressVerb: deepverb
       verb = 'press'
       sdesc = "press"
       doAction = 'Press'
;

extendVerb: deepverb
       verb = 'extend'
       sdesc = "extend"
       doAction = 'Extend'
;

modify sayVerb
       ioAction( toPrep ) = 'SayTo'
;

setupVerb: deepverb
       verb='setup'
       sdesc = "setup"
       action(a) = {
               global.turnsofar:=11;
               julia.moveInto(study);
               Me.moveInto(studyfloor);
               sister.moveInto(studyfloor);
               orp.moveInto(studyfloor);
               aunt.moveInto(studyfloor);
               red.moveInto(studyfloor);
               executor.moveInto(studyfloor);
               global.ischicken:=true;
               global.tvon:=2;
               addword(sister, &noun, 'chicken');
               addword(sister, &noun, 'hen');
               addword(aunt, &noun, 'chicken');
               addword(aunt, &noun, 'hen');
               addword(executor, &noun, 'chicken');
               addword(executor, &noun, 'rooster');
               addword(orp, &noun, 'chicken');
               addword(orp, &noun, 'rooster');
               addword(red, &noun, 'chicken');
               addword(red, &noun, 'rooster');
               addword(barnevelders, &noun, 'chickens');
               addword(barnevelders, &noun, 'roosters');
               addword(barnevelders, &noun, 'hens');
               straw.moveInto( studyfloor );
               balloon.moveInto( studyfloor );
               global.b2 := true;
               helper.moveInto( studyfloor );
               box.isopen := true;
               "Yeah, baby!  ";
       }
;

endgameVerb: deepverb
       verb='endgame'
       sdesc = "endgame"
       action(a) = {
               global.turnsofar:=11;
               julia.moveInto(study);
               Me.moveInto(outside);
               sister.moveInto(outside);
               orp.moveInto(studyfloor);
               aunt.moveInto(studyfloor);
               red.moveInto(studyfloor);
               executor.moveInto(studyfloor);
               global.ischicken:=true;
               addword(sister, &noun, 'chicken');
               addword(sister, &noun, 'hen');
               global.b7 := true;
               "Yeah, baby!";
       }
;

chickenVerb: sysverb
       verb = 'chicken'
       sdesc = "chicken"
       action(a) = {
               "Bart: Fat kids, skinny kids, kids who climb on  rocks...
               \nBart: Smart kids, dumb kids...
               \nMilhouse: ...even kids with chicken pox...
               \nBart: ...love hot dogs, \(armor\) hot dogs!
               \nBart: They're the \(dogs\)... kids love to \(muuunch!\)
               \nLisa: Doesn't this family know any songs that AREN'T television commercals?
               \n(Pause.)
               \nSimpsons family (minus Lisa): I feel like chicken tonight, like chicken tonght, like
                       chicken tonight!
                 ";
               abort;
       }
;

hypnotizeVerb: sysverb
       verb = 'hypnotize'
       sdesc = "hypnotize"
       action(a) = {
               "Bart: Remember that hypnotist we saw to help us resolve our family issues?
               \nHomer: How can I forget!  Five years later, and I \(still\) think I'm a chicken.
               \nHomer: I'm a chicken, Marge!
               \nMarge: I know.
               ";
               abort;
       }
;

/*
-foggyhints: thing;
*/

helpVerb: sysverb
       verb = 'help' 'hint' 'hints'
       action(actor) = {
               self.helpme( actor );
               abort;
       }
       listhints = {
               local i, tot, list;
               list := allhints.myhints;
               tot := length( list );
               clearscreen();
               for (i := 1 ; i <= tot ; ++i) {
                       "\("; say( i ); ")\) "; list[i].sdesc; "\n";
               }
               "\b";
               "------------------------------\n";
               "\b";
       }
       helpme( actor ) = {
               local list, tot, cnt, i;
               list := allhints.myhints;
               tot := length( list );
               self.listhints;
               while ( 1 ) {
                       local resp, j;
                       if(not j) {
                               "\nEnter a number from 1 to "; say(tot); ", or (E)xit: >";
                       }
                       else {
                               "\nEnter a number from 1 to "; say(tot); ", or (E)xit: >";
                       }
                       j := true;
                       resp := lower(input());
                       if (resp = 'e' or resp = 'exit') {
                               clearscreen();
                               Me.location.lookAround(true);
                               abort;
                       }
                       resp := cvtnum( resp );
                       if (resp < 1 or resp > tot)
                               continue;
                       clearscreen();
                       "\("; list[resp].sdesc; "\)";
                       while( 1 ) {
                               local num, cnt, subresp;
                               num := length(list[resp].myhints);
                               if (cnt = -1) { cnt := nil; break; }
                               if (cnt = nil) cnt := 1;
                               "\b"; say(cnt); "/"; say(num); ": "; say( list[resp].myhints[cnt] ); "\b";
                               while( 1 ) {
                                       if(not j) {
                                               if (cnt < num)
                                                       "\nType (N)ext, or (E)xit: >";
                                               else
                                                       "\nNo more hints!  Type (E)xit: >";
                                       }
                                       else {
                                               if (cnt < num)
                                                       "\nType (N)ext, or (E)xit: >";
                                               else
                                                       "\nNo more hints!  Type (E)xit: >";
                                       }
                                       j := true;
                                       subresp := lower(input());
                                       if (cnt < num) {
                                               if (subresp = 'n' or subresp = 'next') {
                                                       ++cnt;
                                                       break;
                                               }
                                       }
                                       if (subresp = 'e' or subresp = 'exit') {
                                               self.listhints;
                                               cnt := -1;
                                               break;
                                       }
                               }
                       }
               }
       }
;

class hintitem: thing
;

class hintlist: thing
;

allhints: hintlist
       sdesc = "Hints"
       myhints = [
               hint1 hint2 hint3 hint4 hint5 hint6 hint7 hint8 hint9 hint10 hint11
               hint12 hint13 hint14
       ]
;

hint1: hintitem
       sdesc="How do I reverse Uncle Foggy's practical joke?"
       hintsseen = 0
       myhints = [
               'Have you tried using the Super Funky Chickenizer (pat. pending)?'
               'Too bad it doesn\'t do anything.'
               'Maybe you can find something in Uncle Foggy\'s lab, across the road.'
       ]
;

hint2: hintitem
       sdesc="What do I do with the Super Funky Chickenizer (pat. pending)?"
       hintsseen = 0
       myhints = [
               'Have you tried flipping the switch?'
               'Doesn\'t do anything, does it?'
               'Looks like you\'ll have to find some other way to reverse the process.'
       ]
;

hint3: hintitem
       sdesc="What do I do with the Hedge Helpers (pat. pending)?"
       hintsseen = 0
       myhints = [
               'Maybe cutting Uncle Foggy\'s hedges would help you deal with your grief.'
               'No?'
               'Then you might try attaching them to something.'
               'Something about as broad as a man\'s shoulders.'
               'Something like the buffalo\'s horns.'
       ]
;

hint4: hintitem
       sdesc="What do I do with the Super-Bendy Balloon-Animal Balloon (pat. pending)?"
       hintsseen = 0
       myhints = [
               'Make balloon animals, of course!'
               'Or maybe you can attach it to something useful.'
               'Like the bellows.'
               'Or the straw.'
               'Then use it to raise the window.'
               'By putting it in the knot.'
               'And inflating it.'
       ]
;

hint5: hintitem
       sdesc="What do I do with the bellows?"
       hintsseen = 0
       myhints = [
               'You could stoke up a nice hot fire.'
               'Or maybe use it to inflate something.'
               'Like the balloon.'
               'Though attaching the balloon directly to the bellows doesn\'t do much good.'
               'A go-between might help.'
               'Like the straw.'
       ]
;

hint6: hintitem
       sdesc="What do I do with the knot in the window?"
       hintsseen = 0
       myhints = [
               'If you had a lever, maybe you could use it to raise the window.'
               'You don\'t have a lever, but maybe you could put something else in the knot.'
               'Like an uninflated balloon.'
               'Attached to a straw.'
       ]
;

hint7: hintitem
       sdesc="Where's that secret button?"
       hintsseen = 0
       myhints = [
               'You\'ll know it when you see it.'
               'Just get on the desk to press it.'
       ]
;

hint8: hintitem
       sdesc="What do I do with the Buffalo-On-A-Spring (pat. pending)?"
       hintsseen = 0
       myhints = [
               'Hmm, it stops at a point above the middle of the room.'
               'Perhaps you could extend its reach.'
               'By attaching something to it.'
               'Or its horns.'
               'Something like the Hedge Helpers.'
       ]
;

hint9: hintitem
       sdesc="How do I get the window open?"
       hintsseen = 0
       myhints = [
               'That\'s the big trick, isn\'t it?'
               'You\'ll need to use a combination of objects found in the room.'
               'You\'ll need the bellows.'
               'And the Super-Bendy Balloon-Animal Balloon.'
               'And the Rainbow Wacky Straw.'
               'And the Hedge Helpers.'
               'And the Buffalo-On-A-Spring.'
               'And of course the knot in the window.'
       ]
;

hint10: hintitem
       sdesc="How do I get across the road?"
       hintsseen = 0
       myhints = [
               'That fox is fast.'
               'But he can\'t stop a \(raging monster truck\).'
       ]
;

hint11: hintitem
       sdesc="How do I start up the monster truck?"
       hintsseen = 0
       myhints = [
               'Just like you would start up any car.'
               'Turn the key.'
               'Put it in gear.'
               'Push the pedal and watch out!'
       ]
;

hint12: hintitem
       sdesc="How can I shut up Julia Childs?"
       hintsseen = 0
       myhints = [
               'Try turning off the television.'
               'No?'
               'Maybe you could call the tv station and ask them to change the program.'
               'Oh yeah, no phone.'
               'And you\'re a chicken, anyway.'
               'Looks like you\'ll have to suffer through her program.  Get over it.'
       ]
;

hint13: hintitem
       sdesc="How do I get Santa's skeleton out of the chimney?"
       hintsseen = 0
       myhints = [
               'Try using the Hedge Helpers (pat. pending).'
               'Hedge Helpers (pat. pending) didn\'t help?'
               'I\'m not surprised.'
               'There is no skeleton in the chimney!'
       ]
;

hint14: hintitem
       sdesc="How do I raise Uncle Foggy from the dead?"
       hintsseen = 0
       myhints = [
               'Have you found Uncle Foggy\'s Zombie-O-Rama (pat. pending)?'
               'You\'ll find it hidden beneath the hidden trap door.'
               'You know, the one beneath the carpet.'
               'Oh, waitaminute.'
               'There is no trap door.'
               'Sorry, wrong game!'
       ]
;

/*
hint?: hintitem
       sdesc = ""
       hintsseen = 0
       myhints = [
       ]
;
*/

outside: room
-foyer:thing;
tv: fixeditem
balloon: item
bellows: item
helper: item
executor: Actor

sister: Actor
modify thing
modify Actor
-verbs:thing;
˜

˜