Constant Story "Monkeys Stole my Pants!"; Constant Headline "^^ By David Nowell(2002) ^ A Screaming Llamas Production^"; ! Added so people don't just pick up everything in the game. Constant MAX_CARRIED = 7; Release 1; Replace OffersLight; Replace ScoreSub; Include "Parser"; Include "VerbLib"; [ OffersLight obj; if (obj == nothing) rfalse; else rtrue; ]; [ ScoreSub; if (deadflag == 0) "There is no score in this game."; ]; [ Initialise; location = Bedroom1; banner(); print "^^Yawwwwnnnn....another morning. Time to get up and head to work. As you rub the sleep out of your eyes, you remember that you have a very important meeting at 10:00. Getting up, you head over to where you laid out your clothes for the day.^ Oh no! Where are your pants?! You can't go to a meeting like this!^ Perhaps you shouldn't have kicked that organ grinding monkey last night...He must be responsible for the theft!^^(TYPE HELP FOR A LIST OF COMMANDS)^"; return(2); ]; ! ---------------------------------------------------------------------------- ! This is the starting location Object Bedroom1 "Bedroom" with name "Bedroom", description "Looking around the bedroom, you decide that tomorrow, you're finally going to get started on cleaning it up. After all, there is nice furniture here, especially your plaid armchair! And the dresser and bed are in good shape too.^ Your bathroom is to the west, and the living room to the east.", w_to Bathroom1_door, e_to Livingroom1; ! Had to add code for enter, because I found some people using Enter Bathroom instead of ! compass directions. Object Bathroom1_door "Bathroom Door" has scenery static door openable ~open ~general with name "bathroom door" "door", description "Just a normal wooden door.", when_open "The bathroom door is open.", when_closed "The bathroom door is closed.", door_to [; if (location==Bedroom1) return Bathroom1; return Bedroom1; ], door_dir [; if (location==Bedroom1) return w_to; return e_to; ], found_in Bedroom1 Bathroom1, before [; Enter: if(Bathroom1 has general && Bathroom1_door has open) { give Bathroom1 ~general; "As you start to enter the bathroom, you see Bob, the Superintendent, hunched over your sink. Seeing you come in, he looks up and says, ^ ~Well, I'm not sure what's wrong here. I'm gonna need to go buy some more tools.~^ With that he leaves your apartment and heads out to his truck.^ You step back into the living room to get out of his way.^"; } attack: "You knock for a while and nothing happens."; examine: if( location==Bathroom1 && self hasnt open && parent(bathrobe) == Bathroom1) "Just a normal wooden door with a robe on it."; ]; ! Ray suggested more typos. Note doesn't do anything, just sets mood Object note "note" Bedroom1 with name "note" "paper", description "Scrawled in big red letters on this paper is the cryptic message:^ 'all yor pants ar belong 2 us - Monkey Lyberation Frunt'", before [; Eat: remove note; "That sure doesn't taste very good. Oh well, at least you got your fiber for the day."; Tear: remove note; "You rip the note into tiny pieces that scatter like confetti. It's a parade!"; ], has edible; ! Has shirt & socks Object dresser "dresser" Bedroom1 has static concealed supporter container openable with name "dresser" "drawer" "drawers", description "A very sturdy solid oak dresser. You didn't realize you had such good taste.^ There are three drawers."; ! Need to wear shirt to leave Object shirt "shirt" dresser has clothing with name "shirt", with description "A nice light blue dress shirt. It would match your pants very well.^ If only you had them"; ! Useless. Can block sink up with them I guess Object socks "pair of socks" dresser has clothing with name "socks", with description "There's a hole in one of your socks."; ! Added verb make to library for bed. If you jump on the bed, it messes it up Object bed "bed" Bedroom1 has concealed static supporter enterable with name "bed", description "This bed is a mess!", before [; Push,Pull: "Too much work!"; Enter: if(self hasnt general) { move player to bed; "You relax on the bed. You deserve to rest for a bit."; } give self ~general; move player to bed; "As you hop on the bed, you've undone all your good work making it."; Make: if(self hasnt general && player notin self) { give self general; "Ah, now that looks a lot nicer!"; } if(self hasnt general && player in self) "How do you plan on making the bed while you're in it?!"; if(self has general) "You've already made the bed! Your mom would be so proud."; Examine: if(self hasnt general) "This bed is a disgrace. The sheets are all crumpled up."; if(self has general) "This bed looks great! You could bounce a quarter off those sheets."; ], react_before [; Jump: if(self hasnt general && player in self) "Weeeeee! That's fun!"; if(self has general && player in self) { give self ~general; "Now you've gone and messed the bed all up!"; } ]; Object chair "chair" Bedroom1 has static concealed supporter enterable with name "chair" "armchair" "plaid", description "Now that looks like a comfy plaid chair. You could certainly relax there.", before [; Attack: "But where would you sit?!"; ]; ! Different descriptions if door is open or closed. ! Playtesting determined that a hint about closing the door is needed. Object Bathroom1 "Bathroom" has ~general, with description "Gleaming porcelain greets you as you take in the scenery. Looks like all that cleaning yesterday wasn't done in vain. Of course, with the door open, the doorknob presses against your back as you approach the sink...^ The bedroom is to the east.", after [; go: ! If you got the Super out of his room, this explains why he's not around anymore. ! And it's just funny to visualize him not being able to take an object out of the sink if(Bathroom1 has general && Bathroom1_door has open && noun == w_obj) { give Bathroom1 ~general; "As you start to enter the bathroom, you see Bob, the Superintendent, hunched over your sink. Seeing you come in, he looks up and says, ^ ~Well, I'm not sure what's wrong here. I'm gonna need to go buy some more tools.~^ With that he leaves your apartment and heads out to his truck.^"; } ], before [; Look: if(Bathroom1_door hasnt open && parent(bathrobe) == Bathroom1) "You are in the bathroom.^ The bedroom is behind the door to the east.^ Your fuzzy purple bathrobe is hanging on the door."; if(Bathroom1_door hasnt open) "You are in the bathroom.^ The bedroom is behind the door to the east."; ], e_to Bathroom1_door; Object bathrobe "bathrobe" Bathroom1 has clothing concealed with name "bathrobe" "robe", description "An extravagantly plush purple robe. Looks comfortable.", react_before [; look: if(Bathroom1_door has open && bathrobe in Bathroom1) give bathrobe concealed; if(Bathroom1_door hasnt open && bathrobe in Bathroom1) give bathrobe ~concealed; if(bathrobe notin Bathroom1) give bathrobe ~concealed; ], before [; take: if(Bathroom1_door has open && bathrobe in Bathroom1) "You can't reach behind the door!"; ! This prevents people from getting stuck in the living room ! if they drop the robe and return to their apartment disrobe, drop, insert: if(pants hasnt worn) "That would be indecent, and this is a PG game!"; ]; Object toothbrush "toothbrush" Bathroom1 with name "toothbrush" "brush", initial "There is a toothbrush in the holder.", description "This is a nice green toothbrush with frayed bristles.", before [; use: if(parent(toothpaste) == player) "Oh yeah, your teeth are looking good now!"; "You need toothpaste to do that!"; ]; Object toothpaste "tube of toothpaste" Bathroom1 has edible with name "toothpaste" "tube" "paste", initial "There is a tube of toothpaste on the sink.", description "Crest is certified by 9 out of 10 dentists. I wonder who #10 is?", before [; eat: remove toothpaste; "Oooohhh, your stomach feels all rumbly."; ]; ! Prevent the player from eating the cookies and not being able to give them ! to Mojo and beat the game. Object cookies "plate of chocolate chip cookies" has edible with name "plate" "chip" "cookies" "chocolate", description "Soft, fresh-baked cookies. Mmmm...mmm...good.", before [; eat: "You take one, and it's excellent. Better save the rest for later."; ]; Object mirror "mirror" Bathroom1 has static with name "mirror", initial "A mirror hangs over the sink.", description "There's some crazy-looking person staring at you!^ And he's wearing your clothes! This is getting weird..."; ! Turning on the sink turns on general, and it checks for if anything is in it, which is the overflow flag ! needed to get the superintendent out of his room Object sink "sink" Bathroom1 has static container open with name "sink", description "What a nice sink. So fun to use. Modern technology truly is an amazing thing.", after [; receive: if(self has general) "The sink starts to overflow! Oh no, it's already dripping on the floor!"; ], before [; examine: if(self has general && child(self)) "The sink is overflowing. Looks like the drain is clogged up."; if(self has general) "The water is running."; switchon,use: if(self hasnt general) { give self general; if(child(self)) "The sink starts running, and is already starting to overflow"; else "The sink is running"; } if(self has general) "It's already on."; switchoff: if(self has general) { give self ~general; "Turned off."; } if(self hasnt general) "It's already off."; ]; Object Livingroom1 "Living Room" with description "Sadly, this is a fairly unmemorable room. It's been a while since you've spent much time in your living room. Maybe if your meeting goes well, you'll be done working all that overtime, and can spend more time relaxing on the couch.^ You can move west to the Bedroom or east out the front door.", w_to Bedroom1, e_to Livingroom1_door; Object couch "couch" Livingroom1 has concealed static supporter enterable with name "couch" "sofa", description "This couch is pretty ratty-looking, but it's still comfortable.", before [; Examine: if(parent(quarters) == self) "It's ratty-looking, but comfortable. Hey, there's some quarters!"; "This couch is pretty ratty-looking, but it's still comfortable."; ]; ! Need to be wearing a robe to go out the front door. Object Livingroom1_door "Living Room Door" has scenery static door openable ~open lockable ~locked, with name "Living Room Door" "Living" "Room" "door", description "Just a normal wooden door.", when_open "The door is open.", when_closed "The door is closed.", found_in Hallway1a Livingroom1, door_to [; if (location==Livingroom1) return Hallway1a; return Livingroom1; ], door_dir [; if (location==Livingroom1) return e_to; return w_to; ], with_key super_key, before [; attack: "You knock for a while and nothing happens."; open: if(bathrobe has worn && self hasnt open) { give self open; "You open the Living Room Door"; } if(pants has worn && self hasnt open) { give self open; "You open the Living Room Door"; } if(bathrobe hasnt worn && location==Livingroom1 && self hasnt open) "You can't go outside in your boxers! That's just crazy talk!"; ]; Object Hallway1a "Hallway" with description "This is the hallway outside your apartment. To the West is your Living Room Door, to the East is the door to Apartment 1B, to the North is a window, and the hallway continues on to the South.", w_to Livingroom1_door, e_to Apt_door1b, s_to Hallway1b; ! This exists to make it a bit harder to break the generator. ! And I like animated objects. Especially annoying ones. Object crowbar "Singing Crowbar" with name "Crowbar" "Singing", description "A sturdy looking crowbar. You don't see any speakers or batteries, so how is it able to sing?", before[; take: if(parent(crowbar) == player) "You already have that."; StartDaemon(crowbar); move crowbar to player; "Taken."; ], ! Every few turns, the crowbar will sing some annoying tune. ! If the player doesn't have the crowbar, the Daemon gets stopped. daemon [; switch (random (25) ) { 2: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~Everybody was kung-fu fighting...those cats were fast as lightning!"; 3: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~Jump around! Jump around! Jump up, jump up, and get down!~"; 4: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~In-A-Gadda-Da-Vida baby, don't you know that I love you...~"; 5: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~Ice ice baby...^ All right stop collaborate and listen^ Ice is back with my brand new invention~"; 6: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~We've been spending all our lives living in a gangsta's paradise.~"; 7: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~In the jungle,, the mighty jungle, the lion sleeps tonight!~"; 8: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~So tell me what you want, what you really want...~"; 12: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~When a problem comes along, you must whip it!~"; 9: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~Moooooooooooooooooonnn river......~"; 10: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~Hey now, you're an all star, get your game on, go play!~"; 11: if(parent(crowbar) ~= player) { StopDaemon(crowbar); ""; } "^~Who is the man that would risk his neck for his brother man?^ SHAFT!^ Can you dig it?~"; } ]; ! Can only be used once you watch QVC and get the phone number. ! Can dial, use, put change / quarters in phone. Flexible verbs Object Payphone "Payphone" Hallway1a has static, with name "Phone" "Payphone" "Telephone", description "Ma Bell's finest...Thirty-five cents to make a call.", before [; dial,use: if(self has general) "Hey now, you hardly need to mess with the phone anymore."; if(parent(change2b) == player && quarters has general) { remove change2b; move crowbar to player; give self general; StartDaemon(crowbar); "Thinking quickly, you call up QVC and inquire about the Singing Crowbar. After being informed that they are willing to extend you a considerable line of credit, you feel unable to refuse, and sign up for the ACME express delivery.^^ Moments after hanging up, a deliveryman walks through the front door, and you sign for your brand new Singing Crowbar! Now that's service..."; } if(parent(quarters) == player && quarters has general) { remove quarters; move crowbar to player; give self general; StartDaemon(crowbar); "Thinking quickly, you call up QVC and inquire about the Singing Crowbar. After being informed that they are willing to extend you a considerable line of credit, you feel unable to refuse, and sign up for the ACME express delivery.^^ Moments after hanging up, a deliveryman walks through the front door, and you sign for your brand new Singing Crowbar! Now that's service..."; } if(parent(quarters) == player || parent(change2b) == player) "No time to chat, you're on a mission!"; "You check the slot for loose change. Nope. Looks like you'll have to find some before you can use the phone."; receive: if(self has general) "Hey now, you hardly need to mess with the phone anymore."; if(noun == note) "You need tape to do that!"; if(noun == quarters or change2b && quarters hasnt general) "No time to chat, you're on a mission!"; if(noun == quarters && quarters has general) { remove quarters; move crowbar to player; give self general; StartDaemon(crowbar); "Thinking quickly, you call up QVC and inquire about the Singing Crowbar. After being informed that they are willing to extend you a considerable line of credit, you feel unable to refuse, and sign up for the ACME express delivery.^^ Moments after hanging up, a deliveryman walks through the front door, and you sign for your brand new Singing Crowbar! Now that's service..."; } if(noun == change2b && quarters has general) { remove change2b; move crowbar to player; give self general; StartDaemon(crowbar); "Thinking quickly, you call up QVC and inquire about the Singing Crowbar. After being informed that they are willing to extend you a considerable line of credit, you feel unable to refuse, and sign up for the ACME express delivery.^^ Moments after hanging up, a deliveryman walks through the front door, and you sign for your brand new Singing Crowbar! Now that's service..."; } ]; Object Window "Window" has scenery openable ~open, with name "Window", description "An old-fashioned wooden window that lifts up. Looking through it, there's a nice view of the street.", found_in Hallway1a Hallway1b Hallway2b, before [; open: "It's stuck! Maybe it's been painted over."; attack: "You could, but then you'd have to pay for it, and your wallet is in your pants."; ]; Object Apt_door1b "Apartment Door 1B" has scenery static door openable ~open lockable locked, with name "Apartment Door 1B" "1B" "door" "Living Room Door", description "A solid wooden door.", when_open "The door is open.", when_closed "The door is closed.", door_to [; if (location==Livingroom1b) return Hallway1a; return Livingroom1b; ], door_dir [; if (location==Livingroom1b) return w_to; return e_to; ], found_in Hallway1a Livingroom1b, with_key super_key, before [; examine: if(location==Livingroom1b) "Just a normal wooden door."; if(location==Hallway1a) "A solid wooden door."; attack: "You knock for a while and nothing happens."; ]; ! If wearing pants & shirts, victory! Object Front_door "Front Door" has scenery static door openable ~open, with name "Front Door" "door" "Front", description "A glass door to the outside.", when_open "The door is open.", when_closed "The door is closed.", door_to [; return Hallway1b;], door_dir [; return w_to; ], found_in Hallway1b, before [; open: if(pants has worn && shirt has worn) { deadflag=2; "You head out the door, confident that everyone at work will be so impressed by your pants that they won't mind you being late!^ ^^Monkeys Stole my Pants:^ Written by David Nowell^ Playtested by:^ - Ray Stakenas II^ - Tom Pearce^ - Jeff Showiak^ - Dave Fulkerson^ - John Wolthuis^ - Travis Patrick^"; } if(pants has worn && shirt hasnt worn) "Ooohh, so close. But you forgot your shirt!"; "You can't go to your meeting without your pants! Everyone would laugh."; attack: "I don't think that's going to help."; ]; ! Need to have sink overflowing to get superintendent out of room. Object Apt_door1d "Apartment Door 1D" has scenery static door openable ~open lockable locked ~general, with name "Apartment Door 1D" "1D" "door" "Living Room Door", description "A solid wooden door.", when_open "The door is open.", when_closed "The door is closed.", door_to [; if (location==Livingroom1d) return Hallway1b; return Livingroom1d; ], door_dir [; if (location==Livingroom1d) return w_to; return e_to; ], found_in Hallway1b Livingroom1d, with_key super_key, before [; attack: if(location==Hallway1b && sink hasnt general && self hasnt general) "The Super yells out, ~Go away, the only thing that'll keep me away from Jerry Springer is an emergency in your apartment!~^ Since you have nothing that needs fixing, you decide to leave him alone"; if(location==Hallway1b && sink has general && children(sink) == 0 && self hasnt general) "The Super yells out, ~Go away, the only thing that'll keep me away from Jerry Springer is an emergency in your apartment!~^ Since you have nothing that needs fixing, you decide to leave him alone"; if(location==Hallway1b && sink has general && children(sink)>0 && self hasnt general) { give self general; give Bathroom1 general; give self ~locked; give self open; "The Super listens to your complaints, and slams open the door, mumbling something about annoying tenants interrupting his sleep. He then stomps past you heading to fix the problem."; } "You knock for a while and nothing happens."; ]; Object Apt_door2b "Apartment Door 2B" has scenery static door openable ~open lockable locked, with name "Apartment Door 2B" "2B" "door" "Living Room Door", description "A solid wooden door.", when_open "The door is open.", when_closed "The door is closed.", door_to [; if (location==Livingroom2b) return Hallway2a; return Livingroom2b; ], door_dir [; if (location==Livingroom2b) return e_to; return w_to; ], found_in Hallway2a Livingroom2b, with_key super_key, before [; attack: "You knock for a while and nothing happens."; ]; Object Apt_door2c "Apartment Door 2C" has scenery static door openable ~open lockable locked, with name "Apartment Door 2C" "2C" "door" "Living Room Door", description "A solid wooden door.", when_open "The door is open.", when_closed "The door is closed.", door_to [; if (location==Livingroom2c) return Hallway2b; return Livingroom2c; ], door_dir [; if (location==Livingroom2c) return e_to; return w_to; ], found_in Hallway2b Livingroom2c, with_key super_key, before [; attack: "You knock for a while and nothing happens."; ]; ! Need to get cookies to convince Mojo to climb flagpole ! Need to turn off power to get her to open door. Object Apt_door2d "Apartment Door 2D" has scenery static door openable ~open lockable locked ~general, with name "Apartment Door 2D" "2D" "door" "Living Room Door", description "A solid wooden door.", when_open "The door is open.", when_closed "The door is closed.", door_to Hallway2b, door_dir e_to, found_in Hallway2b, with_key super_key, before [; attack: if(location==Hallway2b && Generator has general) "Miss Piccone yells at you to go away! Daytime TV can turn even the best person obsessive."; if(location==Hallway2b && Generator hasnt general && self hasnt general) { move cookies to player; give self general; "Miss Piccone opens her door a crack, and upon seeing you, invites you in. The two of you have a nice chat about General Hospital, and what a shame it is that the electricity went out. As you're leaving, she offers you some cookies."; } if(location==Hallway2b && Generator hasnt general && self has general) "You raise your hand to knock, but decide not to wear out your welcome."; open: if(self hasnt locked) "This door is chained from the inside."; ]; Object Livingroom2c "Living Room of Apartment 2C" with description "Not much of interest in this apartment. Just the usual furniture, and what looks like a killer stereo system. The exit is to the east.", e_to Apt_door2c; Object Furniture2c "Furniture" Livingroom2c has scenery, with name "Furniture", description "Typical Art Van stuff."; Object Newspaper "Newspaper" Livingroom2c with name "Paper" "News" "Newspaper", description "You already read this, it's yesterday's paper."; ! Very annoying red herring. Can't be opened. Object FilingCabinet "Filing Cabinet" Livingroom2c has static supporter container openable ~open lockable locked, with name "Cabinet" "Filing", description "This is a nice metal filing cabinet. Looks fireproof."; ! Need to turn on stereo (general flag), to drown out squeaky noise of fire door Object Stereo "Stereo" Livingroom2c with name "stereo" "system", description "Wow, looks like whoever lives here must have sunk some serious cash into their setup.", before [; take: "That just wouldn't be moral."; switchon,use: if(Generator hasnt general) "No power in the apartment...remember breaking the generator?"; if(self hasnt general) { give self general; "Wow, listen to that bass! This stereo is really rockin' the complex."; } "Turning it on again doesn't really do much, now does it?"; switchoff: if(self has general) { give self ~general; "Ahhhh...a little peace & quiet. That's better."; } "It was already off. I guess now it's extra off!"; ]; Object Livingroom1d "Living Room of Apartment 1D" with description "This is the superintendent's apartment. ^ Although calling it an apartment is a bit of an insult to apartments everywhere. You've been in bigger phone booths.^ Apparently there's not as much glamour to working here as you thought.^ There is an exit to your west.", w_to Apt_door1d; Object Livingroom1b "Living Room of Apartment 1B" with description "This is an unfurnished living room. The walls are partially painted, and the carpeting looks brand new. They must be getting ready to rent this apartment out.^ There is an exit to your west.", w_to Apt_door1b; Object Livingroom2b "Living Room of Apartment 2B" with description "This is a sparsely furnished room. Apparently whoever lives here doesn't entertain much.^ There is an exit to your east.", e_to Apt_door2b; ! General means it's on or off. Object Television2b "Television" Livingroom2b has static, with name "TV" "Television", description "A nice 27~ Sony Wega television. You gotta get one of those sometime.", before [; switchon,use: if(Generator hasnt general) "No power in the apartment...remember breaking the generator?"; if(self hasnt general) { give self general; ! quarters has the flag indicating you have a number to call give quarters general; "QVC is on! Oooh, looks like you can order a singing crowbar!^ Just the thing for all your smashing needs. You feel compelled to find a phone."; } if(self has general) "It's already on."; switchoff: if(self has general) { give self ~general; "Turned off."; } if(self hasnt general) "It's already off."; ]; ! Not useful ! Doesn't work if Generator is broken Object Television1d "Television" Livingroom1d has static, with name "TV" "Television", description "One of the old-style televisions with actual knobs.", before [; switchon,use: if(Generator hasnt general) "No power in the apartment...remember breaking the generator?"; if(self hasnt general) { give self general; "The picture has a little static, but it's not bad.^ Hey, Jerry Springer's on! If only you had more time to watch..."; } if(self has general) "It's already on."; switchoff: if(self has general) { give self ~general; "Turned off."; } if(self hasnt general) "It's already off."; ]; Object couch2b "couch" Livingroom2b has static supporter enterable, with name "couch" "sofa", description "This couch is pretty ratty-looking, but it's still comfortable.", before [; Examine: if(parent(change2b) == couch2b) "Doesn't look like this couch has been cleaned in a while. Hey, there's some loose change!"; "This couch is a disaster. None of those stains look very safe to sit on."; ]; Object stains "stains" couch2b has scenery concealed, with name "stains" "stain", description "Looks like the stains were mostly caused by pop."; Object quarters "quarters" couch has concealed, with name "quarters", description "Fifty cents. Sweet!", article ""; Object change2b "change" couch2b has concealed, with name "change" "coins", description "Thirty-five cents. Sweet!", article ""; ! Need to push table off Monkey's tail Object Hallway1b "Hallway" with description "There are stairs going up, and two more doors. The front door is to the West & 1D to the East. The hallway continues to the North.^ You know the Superintendent lives in 1D.", before [; look: if(Hall_Table hasnt general) "There are stairs going up, and two more doors. The front door is to the West & 1D to the East. You know the Superintendent lives in 1D.^ To your south is a window, and the hallway continues on to the North.^ You see a monkey curled up by the front door. He's much cuter than that stupid organ-grinding monkey that stole your pants. It looks like his tail is stuck under the table."; if(Hall_Table has general && parent(Monkey_Pal) ~= player) "There are stairs going up, and two more doors. The front door is to the West & 1D to the East. You know the Superintendent lives in 1D.^ To your south is a window, and the hallway continues on to the North.^ The monkey is curled up under the table, looking very scared and uncertain."; if(Hall_Table has general && parent(Monkey_Pal) == player) "There are stairs going up, and two more doors. The front door is to the West & 1D to the East. You know the Superintendent lives in 1D.^ To your south is a window, and the hallway continues on to the North."; ], n_to Hallway1a, w_to Front_door, e_to Apt_door1D, u_to Hallway2b; Object Hallway2b "Hallway" with description "You are on the second floor of the Apartment building. There is a window to your south, and two apartments here. Apartment 2C is to your West, and 2D to the East. Miss Piccone lives in 2D. She makes mighty fine cookies and is usually friendly, except when her soaps are on...^ The Hallway continues to the North. There is a flight of stairs leading down.", d_to Hallway1b, e_to Apt_door2d, w_to Apt_door2c, n_to Hallway2a; Object Hallway2a "Hallway" with description "You are on the far end of the 2nd floor hallway. There is a roof access to the North, blocked by a fire door. To your east is the maintenance closet, and Apartment 2B is to your west. The hallway continues to the South.", n_to Fire_door, e_to Closet_door, s_to Hallway2b, w_to Apt_door2b; ! Locked. Need key. Squeaky. Need radio to drown out. Object Fire_door "Fire Door" has scenery static door openable ~open lockable locked, with name "Fire Door" "Roof" "door" "Fire", description "A solid metal door.", when_open "The door is open.", when_closed "The door is closed.", door_to [; if (location==Roof_Access) return Hallway2a; return Roof_Access; ], door_dir [; if (location==Roof_Access) return s_to; return n_to; ], found_in Hallway2a Roof_Access, with_key super_key, before [; open: if(self hasnt locked && stereo hasnt general) { "As you start to open the door, you can hear it squeaking...^ That's loud! And what if the Superintendent is back? You'd get in serious trouble. If only there was some way to cover up that noise..."; } attack: "You knock for a while and nothing happens."; ]; Object Closet_door "Closet Door" has scenery static door openable ~open lockable locked, with name "Closet Door" "Closet" "door" "Maintenance Closet Door", description "A solid metal door.", when_open "The door is open.", when_closed "The door is closed.", door_to [; if (location==Closet) return Hallway2a; return Closet; ], door_dir [; if (location==Closet) return w_to; return e_to; ], found_in Hallway2a Closet, with_key super_key, before [; attack: "You knock for a while and nothing happens."; ]; Object Roof_Access "Roof Access Room" with description "This is a small room with a trapdoor to the roof on the ceiling. The firedoor is to the South, and the roof is Up.", s_to Fire_door, u_to Roof; Object Roof "Roof" with description "This is the roof of your building. There is a large flagpole and the building's electrical generator.", d_to Roof_Access; ! Need monkey, cookies, and rope. Object Flagpole "Flagpole" Roof has scenery enterable supporter ~general, with description "A towering flagpole. However, instead of a flag waving in the breeze, it seems like your pants have found a new home!", name "Flagpole" "Flag" "Pole", before [; receive: if(player notin Flagpole) "You need to be on the pole to do that."; letgo: if(player notin Flagpole) "You need to be on the pole to do that."; examine: if(parent(pants)~=Flagpole) "A towering flagpole."; climb: if(parent(rope) == Flagpole) { move player to Flagpole; "You shimmy back up the rope."; } if(parent(monkey_pal)==player && parent(cookies) == player && parent(rope)==player) { move player to Flagpole; move rope to Flagpole; "The flagpole is pretty slick. There's no way you could do it alone.^ Thinking quickly, you offer Mojo some cookies for his assistance. ^ Grabbing the cookies and stuffing them in his mouth, Mojo scampers up to the top and lowers the rope down for you.^ You climb up and pat him on the head."; } if(parent(monkey_pal)==player && monkey_pal has general && parent(rope)==player) { move player to Flagpole; move rope to Flagpole; "The flagpole is pretty slick. There's no way you could do it alone.^ Fortunately, Mojo scampers up to the top and lowers the rope down for you.^ You climb up and pat him on the head."; } if(parent(monkey_pal)==player && parent(rope)==player) { "It's much too slick for you to climb. But if you could get Mojo to drop that rope... As you ponder this, Mojo shrieks at you.^ Sounds like he wants a present before he lugs that rope up!"; } if(parent(monkey_pal) == player) "You and Mojo start to climb the flagpole. It's very smooth, and you only get a few feet before slipping down to the ground.^ Mojo makes it to the top and waits for you for a bit before coming back down."; "It's too smooth. There's nothing to get a handhold on."; enter: "Sorry Spanky, that's not gonna work."; ]; ! General means it works. ~general means it's broken. ! Can only be hit with the crowbar ! Duct tape can fix it Object Generator "Electrical Generator" Roof has scenery general, with name "Electric" "Electrical" "Generator", description "A big ol' mechanical contraption. Seems to be doing a good job of providing power to the building.", react_before[; puton: if(noun == duct_tape && self has general) "But it's not broke!"; if(noun == duct_tape && self hasnt general) { give self general; "Well that's amazing, looks like duct_tape really can fix anything! The generator hums back to life."; } ], before [; examine: if(self hasnt general) "Faint puffs of smoke come from the generator. You feel kind of bad about knocking the power out for the whole building."; attack: if(player in flagpole) "You're on the flagpole! Who do you think you are, Tarzan?"; if(self has general && parent(crowbar) == player) { give self ~general; "Unexpectedly, the crowbar bursts out with a nice operatic aria as you whack the generator! All of a sudden it stops humming, and starts smoking. You're busted now..."; } if(self has general) "There's not much you can do with your fists. If only you had something to hit it with..."; if(self hasnt general) "You already broke it once, more would just be overkill!"; ]; Object pants "pair of pants" Flagpole has clothing with name "pair" "pants", with description "Your pants are a sight for sore eyes.", before [; take: if(player in Flagpole) { move pants to player; "Taken."; } if(location == Roof && parent(pants) == Flagpole) "You need to be on the flagpole to do that..."; disrobe,drop,insert: if(bathrobe hasnt worn) "If you're gonna take those off, you'd best put your robe on first..."; ]; ! This room has a rope, and a ladder that is too heavy to move Object Closet "Maintenance Closet" with name "Maintenance Closet" "Closet", description "This is a fairly large room with a whole bunch of useful-looking tools and other items that Superintendent Bob has been hiding from you!", w_to Closet_door; ! Fun to watch players try and move it. Object ladder "ladder" Closet has static, with name "ladder" "metal", description "This is a big extendable metal ladder.", before [; take: "You lift it up a little ways, but it's just too heavy to carry around."; ]; ! Red herring Object screwdriver "screwdriver" Closet with name "screwdriver", description "Yellow Craftsman Philips-Head screwdriver. Nice."; ! Can fix generator Object duct_tape "roll of duct tape" Closet with name "roll" "duct" "tape", description "Ah Duct Tape, this can fix anything!"; ! Red herring Object ratchet "ratchet" Closet with name "ratchet", description "You think this is a nice ratchet. But really, how would you know? It definitely looks like it could handle all your ratcheting needs though."; ! The table starts off on Mojo's tail. Object Hall_Table "Table" Hallway1b has static, with name "Table", description "A nice ornamental wooden table with a floral pattern.", before [; push,pull: if (self hasnt general) { give self general; "You move it a few inches, just enough to get it off the monkey's tail.^ He immediately hops under the table and hides. The poor thing looks scared and lonely. If only there were some way to cheer him up."; } "You've done it once, there's nothing left to prove..."; ]; ! You can't win without the monkey climbing the flagpole for you. ! You can't get the monkey without moving the table off his tail, then petting or hugging him. Object Monkey_Pal "Monkey" Hallway1b has animate, with name "Monkey" "Mojo", !initial "You see a monkey curled up by the front door. He's much cuter than that stupid !organ-grinding monkey that stole your pants. It looks like his tail is stuck under the table.", description "A cute little monkey!", before [; examine: if(Hall_Table hasnt general) "This monkey is curled up by the front door. He's much cuter than that stupid organ-grinding monkey that stole your pants. It looks like his tail is stuck under the table."; if(Hall_Table has general && parent(Monkey_Pal) ~= player) "He looks a little scared and lonely. If only you could comfort him..."; pet, kiss: if(Hall_Table hasnt general) "The monkey looks a little comforted, but points to his tail stuck under the table"; if(parent(Monkey_Pal) ~= player && Hall_Table has general) { StartDaemon(Monkey_Pal); move Monkey_Pal to player; "The Monkey screeches in joy and jumps in your arms! Looking closer, you can see a nametag that says 'Mojo'."; } if(parent(Monkey_Pal) == player) "Mojo gives you a big ol' kiss on the cheek!"; drop,insert,puton: "As you try and get rid of Mojo, he grabs onto your leg and whines so pitifully that you can't bring yourself to do it!"; smell: "He's kind of stanky..."; attack: "Hey, don't make me call PETA!"; ask: "Mojo nods at your words, and replies ~OOOKK OOOK ACK!~"; ], life [; Give,ThrowAt: if (action == ##ThrowAt) { move noun to location; "You toss ", (the) noun ," at Mojo, but he dodges deftly out of the way."; } ! General means he's eaten the cookies, so he'll climb the flagpole with the rope for you. if (noun == cookies && location == roof) { remove cookies; give Monkey_Pal general; "Mojo grabs at the plate of cookies and gobbles them down!"; } if (noun == cookies) "Mojo looks very interested, but not in the mood for them just yet. Maybe somewhere else..."; move noun to location; "You hand Mojo ", (the) noun, " and he plays with it for a few minutes before tossing it on the ground."; ], daemon [; switch (random (16) ) { 2: "^Mojo begins to scratch himself vigorously."; 3: "^Mojo scampers about."; 4: "^Mojo shrieks at the top of his lungs!"; 5: "^Mojo tries to pick fleas out of your hair."; 6: "^Mojo breakdances!"; } ]; ! Squawky does nothing in the game, but he sure is fun! Object Parrot "Parrot" Livingroom2b with name "Parrot" "Squawky" "bird", description "A vibrantly colored bird with yellow and green plumage. As soon as the bird notices you looking at it, he yells out: ~Squawky wants a cracker!~", before [; ask,tell,answer: switch (random (3) ) { 3: "^~Squawky wants a cracker!~"; 2: "^~Avast Matey!~"; 1: "^~Squawky wants rum and wenches!~"; 4: "~I'm just a parrot, what do you want?!~"; }; take: if(parent(parrot) == player) "You already have that."; StartDaemon(Parrot); move Parrot to player; "He hops on your shoulder."; drop,insert: if(parent(Parrot) == player) { move Parrot to location; StopDaemon(Parrot); "Squawky hops off your shoulder and flies across the room."; } "You've already got rid of him."; ], daemon [; switch (random (20) ) { 2: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } 3: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } "^Squawky hops on your head and bats at your face!"; 4: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } "^~Squawky wants a cracker!~"; 5: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } "^Squawky says ~Avast Matey!~"; 6: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } 7: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } "^~Squawky must kill!~"; 8: if(parent(Parrot) ~= player) { StopDaemon(parrot); ""; } 9: move Parrot to location; StopDaemon(Parrot); "^Squawky circles around and smacks into the wall.^ Looks like he's just lying on the floor, waiting for you to pick him back up."; } ], has animate; Object super_key "superintendent's keys" Livingroom1d with name "super" "key" "keys" "keyring" "superintendent" "superintendent's", description "This is a fairly bulky set of keys. Looks like you can open any door you need!", article "the"; Object rope "50 foot rope" Closet with name "rope" "50" "foot", description "You've always wondered what 50 feet of rope looks like, and now you know!"; ! ---------------------------------------------------------------------------- ! Grammar ! ! The grammar section includes the file "Grammar" and will later include ! extensions to the standard grammar library. ! ! ---------------------------------------------------------------------------- Include "Grammar"; [ MakeSub; "That doesn't make sense."; ]; Verb 'make' * noun -> Make; [ HelpSub; "This is not a comprehensive listing. Just something to help a bit.^ Climb object^ Compass directions will get you most places - use E, W, S, N, NE etc^ (Out, In, Down and Up will also work in many places)^ Drop item^ Examine object^ Get on object^ Hit object^ Inventory gives you a list of what you are carrying (abbreviates to I)^ Knock on object^ Look gives you a full description of your current location^ Open object^ Put item on/in object^ Quit ^ Restart lets you start over from the beginning^ Restore starts a previously saved game^ Save lets you store your game to work on later^ Take object^ Turn on/off object^ Verbose puts the game in verbose mode for descriptions of rooms (Brief is default)^ Wear item^"; ]; Verb 'help' * -> Help; [ DanceSub; "Cue the music, it's time to get wild!"; ]; Verb 'dance' * -> Dance; [ PetSub; "That doesn't make sense."; ]; Verb 'pet' * noun -> Pet; [ TearSub; "You can't tear that"; ]; Verb "tear" * noun -> Tear; Verb 'tickle' * noun -> Pet; Verb 'scratch' * noun -> Pet; !Verb "knock" * noun -> Attack; Verb 'knock' * 'on' noun -> Attack; Verb 'talk' * 'to' creature->Ask; Extend 'ask' first * creature ->Ask; Extend 'speak' first * 'to' creature ->Ask; Verb 'yell' * 'at' creature ->Ask; [ UseSub; "Not appropriate here. Try another verb."; ]; Verb "use" * noun -> Use; [ DialSub; "That's not going to work."; ]; Verb "dial" * noun -> Dial;