Constant Story "Krakatoa Tuna Melt"; Constant Headline "^An interactive food-makin' disaster by David Welbourn (dswxyz@@64look.ca) for SpeedIF 10@@94-9.^ (and before you ask, it took me closer to two days to write, not two hours)^"; Release 2; Serial "021215"; Constant MAX_SCORE = 0; Constant DIALECT_US = 1; Constant DEATH_MENTION_UNDO; Include "Parser"; Object LibraryMessages ! see section 21 of the manual with before [; ! and english.h Miscellany: switch(lm_n) { 19: "You're the current champion of ~Krakatoa Survivor Challenge~, and if you want to remain champion, you need to make a tuna melt sandwich as quickly as possible and bring it back to camp."; } Answer: if (lm_o == player) "Talking to yourself again?"; Ask, Tell: if (lm_o == player) "Talking to yourself again?"; Attack: if (lm_o has animate) "That's not going to win you any fans back home."; else "You vent out your frustrations on ", (the) lm_o, "."; Kiss: "But there's hidden tv cameras all over the place! It's not worth the risk."; Sleep: "SLEEP? There's NO TIME for that!!"; Pray : "Sadly, your prayer is ignored."; Smell: if (lm_o == player) "You'll need a good soak in the tub after this."; "You smell nothing unusual."; Strong: "They'll cut that from the televised version, I'm sure."; Take: if (lm_n == 2) "That doesn't make any sense."; Taste: "Sorry, the challenge is making food, not eating it. (After the game is over, we'll go split a pizza, okay?)"; Touch: switch(lm_n) { 1: "It's not that kind of game."; 2: "You feel nothing unusual."; 3: "Touch yourself on your own time, okay?"; } Wait: "You waste a few precious minutes."; Wake, WakeOther: "No one is asleep."; ]; Include "VerbLib"; [ DeathMessage; if (deadflag == 3) print "You failed to get cheese"; ]; [ emph str; style underline; print (string) str; style roman; ]; [ HeOrShe obj; if (obj has female) { print "she"; return; } print "he"; return; ]; [ HisOrHer obj; if (obj has female) { print "her"; return; } print "his"; return; ]; !----------------- Object Biff "Biff" with name 'biff' 'bradclaw' 'man' 'host' 'phony', description "Biff Bradclaw is the ever-smiling host of the show, and has the blackest, greasiest hair you've ever seen. Eeww. You can't imagine what the girls back home see in him; he's such an obvious phony.", orders [; default: "~Sorry, I'm not allowed to help you.~ He smiles that maddening grin."; ], life [; Show, Give: if (noun ~= bread) "~That doesn't look like a sandwich.~"; else if (bread.number == 0) "~You're gonna need more to that sandwich than just bread, champ.~"; else if (bread.number == 1) "~I see the tuna, but where's the cheese?~"; else if (bread.number == 2) "~You're almost there, champ. Now go melt that cheese!~"; else if (bread.number == 3) { deadflag = 2; "~Is it? It is! A tuna melt! Ladies, and gentlemen, we have a winnah! Anything you'd like to say to the folks at home?~"; } ], has proper male animate; Object Kari "Kari" ! Kari Knott with name 'kari' 'knott' 'woman' 'girl' 'waitress' 'contestant' 'challenger' 'opponent', hasfish 0, hasstick 0, seenfish 0, hasbread 0, hascheese 0, description "Kari Knott is a moderately attractive dirty-blonde girl from Toledo, Ohio. Although she's only 23, she's already got that bleary-eyed look from working too many late night shifts at Pepe's Diner.", orders [; default: "She's one of your opponents, remember?"; ], daemon [; Robot(self); ], has proper female animate; Object Russ "Russ" ! Russ Rohoho with name 'russ' 'rohoho' 'man' 'hawaiian' 'host' 'contestant' 'challenger' 'opponent', hasfish 0, hasstick 0, seenfish 0, hasbread 0, hascheese 0, description "Russ Rohoho is an attractive forty-something with his Hawaiian and Italian mixed heritage. His late night talk show, ~Luau Fever~, is supposedly very popular in Hawaii, but of course he'd say that.", orders [; default: "He's one of your opponents, remember?"; ], daemon [; Robot(self); ], has proper male animate; [ Robot who i; i = random(10); switch(parent(who)) { Camp: switch (i) { 0: move who to DeepForest; if (location == Camp) "^", (name) who, " heads north into the forest."; if (location == DeepForest) "^", (name) who, " arrives from the south."; 1: move who to Village; if (location == Camp) "^", (name) who, " takes the northeast path."; if (location == Village) "^", (name) who, " arrives from the southwest."; 2: move who to Beach; if (location == Camp) "^", (name) who, " takes the east path."; if (location == Beach) "^", (name) who, " arrives from the west."; 3: move who to Lagoon; if (location == Camp) "^", (name) who, " heads south to the lagoon."; if (location == Lagoon) "^", (name) who, " arrives from the camp."; 4: move who to Meadow; if (location == Camp) "^", (name) who, " takes the west path."; if (location == Meadow) "^", (name) who, "enters from the east."; 5: move who to Hill; if (location == Camp) "^", (name) who, " takes the northwest path."; if (location == Hill) "^", (name) who, " enters from the southeast."; 6: if (location == Camp) "^", (name) who, " searches the camp."; 7: if (location == Camp) "^", (name) who, " whispers a question to Biff, who shakes his head."; 8: if (location == Camp) "^", (name) who, " whispers a question to Biff, who nods."; 9: if (location == Camp) "^", (name) who, " looks at you suspiciously."; } Lagoon: switch(i) { 0,1: move who to Camp; if (location == Lagoon) "^", (name) who, " heads back to camp."; if (location == Camp) "^", (name) who, " enters from the lagoon."; 2,3: move who to Beach; if (location == Lagoon) "^", (name) who, " strides off east."; if (location == Beach) "^", (name) who, " arrives from the south."; 4,5: move who to Meadow; if (location == Lagoon) "^", (name) who, " walks west."; if (location == Meadow) "^", (name) who, " arrives from the south."; default: if (who.hasfish == 1) { move who to Camp; if (location == Lagoon) "^", (name) who, " heads back to camp."; if (location == Camp) "^", (name) who, " enters from the lagoon."; } else if (who.seenfish == 0) { who.seenfish = 1; if (location == Lagoon) "^", (name) who, " looks in the lagoon with interest."; } else if (who.hasstick == 1) { who.hasfish = 1; if (location == Lagoon) "^Suddenly, ", (name) who, " stabs a long pointy fish into the water, and snares a fish! ", (CThatorThose) who, " looks rather pleased with ", (ItorThem) who, "self."; } else if (location == Lagoon) "^", (name) who, " looks in the lagoon thoughtfully."; } Beach: switch (i) { 0,1: move who to Village; if (location == Beach) "^", (name) who, " heads north."; if (location == Village) "^", (name) who, " enters from south beach."; 2,3: move who to Camp; if (location == Beach) "^", (name) who, " heads back west to camp."; if (location == Camp) "^", (name) who, " walks in from the east."; 4,5: move who to Lagoon; if (location == Beach) "^", (name) who, " decides to go south."; if (location == Lagoon) "^", (name) who, " wanders in from the east."; 6,7: if (location == Beach) "^", (name) who, " searches the beach."; 8: if (location == Beach) "^", (name) who, " scans the horizon."; 9,10: if (location == Beach) "^", (name) who, " looks at the volcano, worriedly."; } Meadow: switch (i) { 0,1: move who to Hill; if (location == Meadow) "^", (name) who, " heads north."; if (location == Hill) "^", (name) who, " enters from south meadow."; 2,3: move who to Camp; if (location == Meadow) "^", (name) who, " heads back east to camp."; if (location == Camp) "^", (name) who, " walks in from the west."; 4,5: move who to Lagoon; if (location == Meadow) "^", (name) who, " decides to go south."; if (location == Lagoon) "^", (name) who, " wanders in from the west."; 6,7: if (location == Meadow) "^", (name) who, " looks at the cows with interest."; 8: if (location == Meadow) "^", (name) who, " studies the sheep, thoughtfully."; 9,10: if (location == Meadow) "^", (name) who, " looks at the volcano, worriedly."; } DeepForest: switch (i) { 0: move who to DeeperForest; if (location == DeepForest) "^", (name) who, " ventures deeper into the forest, towards the volcano."; if (location == DeeperForest) "^", (name) who, " arrives from the south."; 1: move who to Hill; if (location == DeepForest) "^", (name) who, " heads through the forest to the west."; if (location == Hill) "^", (name) who, " emerges from the forest."; 2: move who to Village; if (location == DeepForest) "^", (name) who, " heads through the forest to the east."; if (location == Village) "^", (name) who, " emerges from the forest."; 3: move who to Camp; if (location == DeepForest) "^", (name) who, " heads south, towards the camp."; if (location == Camp) "^", (name) who, " emerges from the forest to the north."; 4,5: if (location == DeepForest) "^", (name) who, " tries to climb one of the trees, but fails."; default: if (who.hasstick == 0) { who.hasstick = 1; if (location == DeepForest) "^", (name) who, " finds a pointy stick and picks it up."; } switch (i) { 6,7: move who to DeeperForest; if (location == DeepForest) "^", (name) who, " ventures deeper into the forest, towards the volcano."; if (location == DeeperForest) "^", (name) who, " arrives from the south."; 8,9,10: move who to Camp; if (location == DeepForest) "^", (name) who, " heads south, towards the camp."; if (location == Camp) "^", (name) who, " emerges from the forest to the north."; } } Hill: switch (i) { 0,1: move who to DeeperForest; if (location == Hill) "^", (name) who, " heads north into the forest."; if (location == DeeperForest) "^", (name) who, " arrives from the west."; 2,3: move who to DeepForest; if (location == Hill) "^", (name) who, " heads east into the forest."; if (location == DeepForest) "^", (name) who, " enters from the west."; 4,5: move who to Camp; if (location == Hill) "^", (name) who, " takes the southeast path back to camp."; if (location == Camp) "^", (name) who, " arrives on the northwest path."; 6,7: move who to Meadow; if (location == Hill) "^", (name) who, " leaves you, and goes south."; if (location == Meadow) "^You spot ", (name) who, ", arriving from the north."; 8,9: if (location == Hill) "^", (name) who, " looks sadly at the dead lamb."; 10: if (location == Hill) "^", (name) who, " rubs something out of ", (hisorher) who, " eye."; } Village: switch (i) { 0,1: move who to Bakery; if (location == Village) "^", (name) who, " enters El Bakery."; if (location == Bakery) "^", (name) who, " enters the bakery."; 2,3: move who to DeepForest; if (location == Village) "^", (name) who, " enters the forest, to the west."; if (location == DeepForest) "^", (name) who, " arrives from the east."; 4,5,6: move who to Camp; if (location == Village) "^", (name) who, " leaves to the southwest, back towards the camp."; if (location == Camp) "^", (name) who, " arrives on the northeast path."; 7: move who to Beach; if (location == Village) "^", (name) who, " wanders off, south."; if (location == Beach) "^", (name) who, " wanders in from the north."; 8: if (location == Village) "^", (name) who, " looks around the village."; 9: if (location == Village) "^", (name) who, " studies the cannon, carefully."; 10: who.hascheese = 1; if (location == Village) "^", (name) who, " makes a little exclamation of delight, as ", (heorshe) who, " extracts a bit of cheese from a hidden mousetrap."; } Bakery: if (who.hasbread == 0) { who.hasbread = 1; if (location == Bakery) "^You watch, sullenly, as ", (name) who, " quickly buys a baguette from the baker."; } else if (i == 0 or 1) { if (location == Bakery) "^", (name) who, " whispers something to the baker, who whispers something back in return."; } else if (i == 2 or 3) { if (location == Bakery) "^", (name) who, " pauses to look tenderly at the sleeping baby."; } else { move who to Village; if (location == Bakery) "^", (name) who, " leaves the shop."; if (location == Village) "^", (name) who, " emerges from El Bakery, smiling happily."; } DeeperForest: switch (i) { 0,1,2,3,4: move who to Hill; if (location == DeeperForest) "^", (name) who, " heads off in a random direction, and is soon lost to view."; if (location == Hill) "^", (name) who, " emerges from the forest, to the north."; default: move who to DeepForest; if (location == DeeperForest) "^", (name) who, " heads off in a random direction, and is soon lost to view."; if (location == DeepForest) "^A rustling in the forest floor alerts you to ", (name) who, "'s entrance, as ", (heorshe) who, " arrives from the north."; } } ]; !------------------------------------------------------------- Object Camp "~Challenge~ Camp" with name 'tv' 'television' 'camera', description "The ~Challenge~ camp is set up just north of Krakatoa's southern lagoon. Deep forest separates you from the smoking volcano to the north, and other paths lead west, northwest, northeast, and east.", s_to Lagoon, n_to [; print "You head north into the ..."; return DeepForest; ], w_to Meadow, e_to Beach, ne_to Village, nw_to Hill, has light; Object distantVolcano "volcano" with name 'volcano' 'krakatoa' 'smoke' 'mountain', description "Krakatoa's volcano, situated in the center of the island, isn't as dormant as you'd like. You can clearly see smoke billowing out from its no-doubt fiery depths.", found_in Camp Lagoon Beach DeepForest Meadow Hill Village Clearing MtSide, daemon [i; i = random(12); switch (i) { 0: "^You hear distant rumbling from the volcano."; 1: "^The ground shakes, slightly."; 2: "^There's a brief tremor, then it passes."; 3: "^The volcano noisily belches more smoke into the air."; 4: "^A parrot squawks as it flies overhead. Beautiful plumage."; 5: "^You hear a monkey chittering somewhere nearby."; } ], has scenery; Object Lagoon "Lagoon" with description "This natural lagoon is a perfect place for fishing. You wish your friend Harley was here. Harley loved to go fishing with you when you were kids. The camp is visible to the north, and the beach extends west and east, and of course the ocean fills your view south, all the way to the horizon.", n_to Camp, nw_to Meadow, w_to Meadow, ne_to Beach, e_to Beach, s_to "If you want to swim, just say so.", before [; Swim: "You dive into the lagoon, grabbing wildly at the swimming fish. The water seems to boil as you churn up the water in vain. But when you come up for air, there's a fish caught in -- no, it flops of your shirt back into the lagoon. Damn!"; ], has light; Object water "water" Lagoon with name 'water' 'lagoon' 'ocean', description "The water is clear as clear can be. You can even see some tuna fish swimming in its depths.", before [; Drink: "You cup your hands and drink a little of the refeshing salty ocean water. SALTY!?!? (gag, spit, cough)"; ], has scenery; Object swimmingfish "swimming tuna fish" Lagoon with name 'swimming' 'tuna' 'fish' 'school' 'of', giggled 0, description "A school of tuna fish are swimming in the sparkling clear lagoon waters. Tempting you.", before [; Take: "You can't just ", (emph) "take", " the fish from the lagoon! You have to catch one, somehow."; Attack, Catch: if (second == stick) { print "You thrust your pointy stick at the swimming fish, but the refraction of the clear water fools you, and your stabs miss their mark."; if (self.giggled == 0) { self.giggled = 1; print " Bubbles rise from the fishes' tiny lips like tiny fishy giggles."; } new_line; rtrue; } if (second == rock) "A rock, even a sharp one, isn't a good fishing tool."; ], has scenery animate; Object tunafish "fresh tuna fish" with name 'fresh' 'freshly-caught' 'freshly' 'caught' 'tuna' 'fish', description [; if (self hasnt general) print "It's a freshly-caught funa tish. I mean, it's a freshly-caught tuna fish."; else print "It's a freshly-caught deboned tuna fish."; " One of the ingredients you'll need for your tuna melt."; ], before [; Eat: if (self hasnt general) "You want to eat a tuna fish that hasn't been deboned yet?"; Cut: if (second == nothing) "With what?"; else if (self has general) "The tuna is already deboned."; else if (second == rock) { give self general; "You use the sharp rock to debone the tuna."; } else if (second == stick) "The stick is good for stabbing, but not for slicing. Sorry."; ], after [; Eat: give self ~general; "You eat the tuna fish, confident that you've enough time to catch another one for your sandwich, you fool, you fool."; ], has edible; Object DeepForest "Deep Forest" with name 'tree' 'trees', description "You're in a deep forest with lots of those really tall trees with no climbable branches in reach.", s_to [; print "You emerge out of the forest into ..."; return Camp; ], n_to DeeperForest, w_to Hill, e_to Village, has light; Object stick "pointy stick" DeepForest with name 'pointy' 'stick' 'branch' 'wood' 'wooden', description "It's a pointy stick about three feet long.", initial "There's a fallen branch from one of those unclimbable trees on the ground here."; Object trees "trees" with name 'tree' 'trees' 'unclimbable' 'tall' 'branches' 'forest', description "That's not something you need to refer to in the course of this game.", before [; Climb: "You can't climb them. Honestly. And you don't need to. You think cheese grows on trees? Or tuna? Or bread?"; default: "That's not something you need to refer to in the course of this game."; ], found_in DeepForest, has scenery; Object Meadow "Oceanside Meadow" with name 'grass', description "A grassy meadow covers this corner of the island. That seems plausible, right? At any rate, several sheep and cows are here, taking advantage of the grass and eating their full. Hills are to the north, towards the volcano, and the camp lies east.", s_to Lagoon, se_to Lagoon, e_to Camp, n_to Hill, has light; Object animals "cows and sheep" Meadow with name 'cow' 'cows' 'sheep' 'lamb' 'lambs' 'ewe' 'ewes' 'animals' 'dairy', description "Lots of dairy animals here. Just imagine how much milk they have. You're no expert, but in your considered opinion, they have lots and lots of milk.", before [; Attack: "P-p-p-please don't hurt the animals. Let these ones live!"; Milk: if (bottle notin player) "Pumping vigourously, you fill... wait a minute. What are you putting this milk ", (emph) "in?"; else if (child(bottle) ~= nothing) "The bottle is already contains ", child(bottle), "!"; else { move milk to bottle; "Pumping vigourously, you fill the five liter bottle with a large quantity of milk. (About five liters. More or less.)"; } ], has animate pluralname concealed; Object milk "large quantity of milk" with name 'large' 'quantity' 'of' 'milk', description [; if (self.curdled == 0) "Looks like normal milk to me."; else "The milk has been curdled by enzymes in the rennet."; ], curdled 0, before [; Take: "Milk is liquid. Use a container."; Drink: "You're more of a wine and cheese person. You like your milk somewhat thicker and denser, if you know what I mean."; Insert: if (second == bubble) { move milk to bubble; print "You pour the milk into the time bubble (glug, glug, glug). Emil opens his mouth, then closes it again, and says nothing."; if (rennet in bubble) { remove rennet; milk.curdled = 1; print " The rennet and milk combine, resulting in exquisitely curdled milk."; } new_line; rtrue; } ]; Object Hill "Lonely Hill" with description "This lonely hill might be a tranquil spot normally, but the dead sheep rather spoils the mood. Forest is north and east of you, and more pleasant areas are south and southeast.", s_to Meadow, se_to Camp, e_to DeepForest, n_to DeeperForest, has light; Object deadlamb "dead lamb" Hill with name 'dead' 'lamb' 'sheep' 'corpse' 'body' 'animal', description [; print "This poor little lamb has lost its way. (baa baa baa)^ It tripped and fell, and here he'll stay. (baa baa baa)^ A predator ate its flesh away. (baa baa baa)^"; if (stomach has concealed) "And now its stomach greets the day. (baa baa baa)^^ Yeah. You can see its stomach. Ick."; else "Its stomach, too, has gone astray. (baa baa baa)"; ], before [; Attack: "A bit pointless to flog a dead lamb, wouldn't you say?"; Cut: if (stomach has concealed) <>; else "Haven't you done enough to this poor lamb?"; Eat: "No. No no no."; Milk: "Sorry. If this sheep had milk before, it doesn't now."; Take: "You are *not* going to carry an entire dead lamb about the island."; ], has static scenery; Object stomach "stomach" Hill with name 'stomach' 'dried', description [; print "It's a dried sheep stomach. Gross. "; <>; ], before [; Take: if (self has concealed) "You'll need to cut the stomach free, first."; Cut: if (self hasnt concealed) "No need to cut up the stomach further."; if (second == rock) { give self ~concealed; give self ~static; "Using the sharp rock, you manage to saw the stomach free of the dead sheep."; } if (second == nothing) "With what?"; "You'll need a more suitable cutting tool than that."; ], after [; ], has static container open concealed; Object rennet "quantity of rennet" stomach with name 'rennet' 'rennin', description "Cheesemakers know that rennet contains rennin, a milk-curdling enzyme used in making cheese. For some reason, this isn't common knowledge to cheese eaters. But you know now, right?", before [; Take: "You can't take the rennet without a suitable container. (Or without taking the container it's already in.)"; Insert: if (second == bottle) { if (stomach has concealed) "Er. You're planning on picking up the dead lamb, and holding it upside down over the pop bottle, hoping the rennet will dribble in okay? I don't think so."; else if (rennet in stomach) "The rennet doesn't need to go into the pop bottle."; } else if (second == bubble) { move rennet to bubble; remove stomach; print "You pour the rennet into the time bubble, and toss the sheep's stomach away. Emil watches you curiously."; if (milk in bubble) { remove rennet; milk.curdled = 1; print " The rennet and milk combine, resulting in exquisitely curdled milk."; } new_line; rtrue; } ]; Object DeeperForest "Deeper Forest" with name 'tree' 'trees' 'forest', description "You can easily believe you're far from home. You can't see much except for trees, trees, and more trees in all directions, but at least they provide some welcome shade.", w_to Hill, s_to DeepForest, e_to Clearing, n_to MtSide, nw_to DeeperForest, ne_to DeeperForest, sw_to DeeperForest, se_to DeeperForest, has light; Object Beach "Beach" with name 'sand' 'water' 'ocean' 'beach', description "Nice sandy beach. Shame you don't have time to just sit down and enjoy it.", before [; Swim: "No, no, you've got a challenge to do. Maybe later."; ], n_to Village, w_to Camp, sw_to Lagoon, s_to Lagoon, e_to "Hm. A swim would be nice, but can't really justify doing that right here and now.", has light; Object popcorn "bag of popcorn" Beach with name 'bag' 'of' 'popcorn', description "It's a half-eaten bag of popcorn.", initial "Someone has discarded a bag of popcorn here.", before [; Eat: "You're not that hungry. And it's probably stale."; Search: "The bag of popcorn contains... popcorn. Just popcorn. Isn't that enough?"; Empty: "Don't worry, I promise you won't lose your trail in the forest."; Give: if (second == swimmingfish) { move tunafish to player; "You cleverly drop some of the popcorn into the water, and easily grab one of the fish when they pop up their heads to eat it."; } ], has edible; Object Village "Village" with description "A sparse looking village, but the ~El Bakery~ on the north side looks most interesting to you. Forest shades the village from the west, and paths lead southwest and south.", w_to DeepForest, sw_to Camp, s_to Beach, n_to Bakery, in_to Bakery, has light; Object cannon "cannon" Village with name 'iron' 'heavy' 'cannon', description "The heavy iron cannon is a relic from history, once used to repel pirates from Krakatoa's shores. Its muzzle points up and east over the ocean, but it's not empty. There's a bamboo structure inside it.", initial "In the center of the village is a cannon.", has static container open; Object rocket "rocketship" cannon with name 'rocket' 'ship' 'rocketship' 'bamboo' 'space' 'spaceship' 'tiny' 'small' 'structure', description "It's hard to believe, but that's a tiny bamboo rocketship stuck in the muzzle of the cannon, large enough to launch a monkey far over the ocean. Is this what they do for fun around here? Jesus.", has static container; Object blackbox "black box" Village with name 'black' 'box' 'nuke' 'nuclear' 'bomb' 'mini' 'frobozz' 'magic', description "It's a mysterious black box all right. The only clue to what it is are the words ~Frobozz Magic Mini Nuke~ in bright yellow letters on the top.", initial "Attached to the back end of the cannon is a mysterious black box.", before [; Receive: if (noun ~= goodcrystal) "The only thing that belongs in this box is the glowing green crystal you found in it in the first place, capeesh?"; ], after [; Open: print "The black box opens easily. "; <>; ], has ~open openable container static; Object goodcrystal "glowing green crystal" blackbox with name 'glowing' 'green' 'crystal', description "It's a crystal. It's glowing and green. I dunno what it is. Kryptonite? (yeah, right)", before [; Give, Show: if (second == Emil) { remove Emil; remove bubble; remove goodcrystal; remove badcrystal; remove button; "~Sacrebleu!~ Emil exclaims, as he grabs the glowing crystal from your hand, and replaces the broken crystal with it. Muttering excitedly, he fiddles with controls.^^Then, Emil takes a deep breath, pushes the white button and hops into the bubble. One heart beat, two, then ", (emph) "the bubble vanishes!"; } ]; Object bottle "five liter bottle" Village with name 'five' 'liter' 'plastic' 'pop' 'soda' 'bottle', description [; print "It's one of those new five liter pop bottles. For when you're really really thristy."; <>; ], initial "Some litterbug has left a gigantic pop bottle here.", before [; Fill: if (location == Lagoon) "You don't need any water from the lagoon."; Receive: if (noun ~= water or milk or rennet) "Er, um, only put liquids in the bottle, please. Thanks."; ], has container open transparent; Object Bakery "El Bakery" with name 'blanket' 'blankets' 'headband' 'outfit', description "You've entered the best bakery on Krakatoa. The only bakery on Krakatoa. There's a sign on the wall, and the exit is south.", s_to Village, out_to Village, has light; Object Jor "Jor" Bakery ! Jor El with name 'jor' 'el' 'man' 'baker' 'father' 'dad', description "The baker is wearing a strange green tropical outfit. You can tell it's tropical by the large sun emblem on his chest. He's also wearing a headband instead of the expected chef's hat.", initial "The baker is here, hoping you'll buy some bread.", has male animate proper; Object Kal "baby" Bakery ! Kal El with name 'kal' 'el' 'kal-el' 'baby' 'boy' 'son' 'child' 'kid' 'bundle', description "The baby boy is sleeping soundly, and who wouldn't, comfortably wrapped in three large blankets?", initial "In one corner of the bakery, a baby is sleeping, nestled in blankets.", before [; Wake: "Oh, please. Let sleeping babies lie."; ], has male animate proper; Object bread "baguette" Bakery with name 'loaf' 'of' 'bread' 'baguette' 'sandwich', number 0, ! 0 = bread; 1 = with tuna; 2 = with tuna and cheese; 3 = tuna melt description [; if (self.number == 0) "It's a baguette, a nice loaf of bread for a nice sandwich, and one of the ingredients you'll need for your tuna melt."; if (self.number == 1) "It's a baguette with tuna fish on top."; if (self.number == 2) "It's a uncooked tuna melt sandwich."; if (self.number == 3) "Your tuna melt sandwich is complete! Now take it back to the camp!"; ], before [; Take, Buy: if (bread in Bakery) { move bread to player; "You buy a nice baguette."; } Receive: if (noun ~= tunafish or cheese) "That doesn't belong on our sandwich!"; if (self.number == 0) { if (noun == cheese) "We need to put the tuna on first."; else if (tunafish hasnt general) "Shouldn't you debone the tuna, first?"; else { self.number = 1; remove tunafish; "You put the deboned tuna on the bread."; } } else if (self.number == 1) { if (noun == cheese) { self.number = 2; remove cheese; "You layer the cheese over the tuna. Looking good!"; } } ], has supporter; Object sign "sign" Bakery with name 'sign', description [; box " The End Is Near " " The Earth Is Doomed " "Baguettes Baked Daily" " Have A Nice Day "; ], has scenery; Object Clearing "Hidden Clearing" with description [; if (bubble in Clearing) print "This hidden clearing near the base of the mountain might be unremarkable except that it's the current home of a large glass bubble and a most unusual man."; else print "This hidden clearing near the base of the mountain is unremarkable, except that you once met a Frenchman from 1888 here, and who you'll never see again."; if (self hasnt visited) "^^~Mon dieu!~ exclaims the man, as he rushes to greet you. ^^There is some confusion, since he speaks only French, and you speak only English, but he manages to tell you his name, Emil Petit, and then he scratches the number 1888 on the ground, pointing to the bubble and himself, frantically. What does he mean? Is he trying to say that he's from 1888, and a ", (emph) "time traveler?", "^^As if to prove it, he tosses some grapes into the bubble and pushes a white button. In an instant, the grapes age into raisins! He then stifles a sob, and removes the raisins from the bubble. I guess the bubble isn't supposed to work that way. ^^Then Emil shows points out a green crystal in the controls and asks you a question. You shake your head in confusion, and he sadly shakes his head in return."; else new_line; ], cant_go "The forest paths confuse you and you return to the clearing. (Psst, go south.)", s_to DeeperForest, has light; Object Emil "Emil" Clearing ! Emil Petit, frenchman from 1888 with name 'emil' 'petit' 'man' 'french' 'frenchman', description "Emil Petit is a Frenchman who looks more out of place on this island than you do. He's well-dressed, but oddly out of fashion. And he's obviously cultured, which clashes somewhat with your notion of what most Frenchmen are like.", orders [; default: "The language barrier makes it difficult to tell Emil anything."; ], life [; Ask, Tell, Consult: "The language barrier makes it difficult to ask or tell Emil anything. Pity. You feel that Emil would be great conversationalist."; ], has proper male animate; Object bubble "glass bubble" Clearing with name 'time' 'machine' 'large' 'glass' 'bubble' 'platform' 'egg' 'shell', description [; print "The bubble is a marvel of French craftsmanship. It resembles a roc's egg in its nest, except that the ~egg~ is a perfectly-blown clear glass shell, a circular opening on one side, and the ~nest~ is a quaint ironmongery from quite literally another time. The controls make no sense to you, except for a white button that Emil has labelled an ~activateur~, and there's the broken green crystal that Emil pointed out earlier. "; <>; ], before [; Enter: "You have no need to enter the bubble. Just put things in it."; Receive: if (second ~= rennet or milk) "You don't want to put that in the bubble."; ], has container static transparent open; Object button "white button" Clearing with name 'white' 'button' 'activateur' 'activator' 'controls' 'ironmongery' 'nest', description "The white button is labelled ~activateur~.", before [; Push: print "You push the white button."; if (rennet in bubble) { remove rennet; " The rennet evaporates. Oops."; } else if (milk in bubble && milk.curdled == 1) { remove milk; move cheese to bubble; " It's a miracle! The curdled milk rapidly ages, and turns into cheese!^^~C'est fromage!~ Emil cries out in wonder."; } else if (milk in bubble) { remove milk; " At first, nothing seems to happen, but then your senses are assaulted by the rank smell of sour milk. The milk's looking a little green, and you don't feel so good yourself.^^~Phau!~ Emil exclaims. He quickly does something with the bubble's controls. There is a flash of light, and in a blink, the milk is gone."; } else " Nothing happens."; Take: "That's a part of the bubble."; ], has static concealed; Object badcrystal "broken green crystal" Clearing with name 'broken' 'green' 'crystal' 'gem', description "The broken green crystal is dark and lifeless, and part of the bubble's controls.", before [; Take: "That's a part of the bubble."; ], has static concealed; Object cheese "slab of cheese" with name 'cheese' 'slab' 'of', description "It's a delicious looking slab of cheese. But the most remarkable thing about it is that you made it yourself. Huzzah!", before [; Eat: "You can't resist nibbling a little of the precious cheese and you're pleasantly surprised how good it is. It takes all your willpower not to eat the entire thing."; Take: if (cheese hasnt moved) { move cheese to player; "With a trembling hand, you extract the slab of cheese from the bubble, solemnly break it in two, and give half to Emil. Staring at his half of the cheese, tears running down his face, he blesses you, and then, in a startling display of emotion, kisses both of your cheeks, crying, ~Merci! Merci beaucoup!~"; } ], has edible; Object MtSide "Mountainside" with description "You're climbing the side of the volcano. There's not much here but volcanic rock. You can head further up to the north, or go down into the forest to the south.", n_to Lip, s_to DeeperForest, u_to Lip, d_to DeeperForest, has light; Object rock "sharp rock" MtSide with name 'volcanic' 'sharp' 'rock' 'obsidian' 'knife', description "It's a piece of obsidian with a sharp edge. I think we'll call it... knife.", after [; Take: if (self hasnt moved) { give self ~concealed; "Well, hey, volcanic rock. Sure, let's take a rock!"; } ], has concealed; Object Lip "Lip of the Volcano" with name 'smoke' 'ash', number 0, description [; print "Wow. You're standing on a tiny ledge on the rim, or lip of the volcano. The smoke is blowing into your face, and you can see molten lava far below. Needless to say, it's extremely hot here, and quite a bit dangerous."; if (self hasnt visited) print " It's just a suggestion, but you probably shouldn't stay here longer than you absolutely must. Unless you want to melt. ", (emph) "Literally."; new_line; self.number = 0; StartDaemon(self); if (bread in Lip && bread.number == 2) bread.number = 3; ], s_to [; StopDaemon(self); return MtSide; ], d_to [; StopDaemon(self); return MtSide; ], before [; Jump: deadflag = 1; print "Insanely, you jump into the Krakatoa's fiery cauldron, despite the fact that you are not a polynesian virgin sacrifice."; if (IndirectlyContains(player,goodcrystal)) print " Unfortunately for the rest of the world, it has no time to mock your stupidity, since the entire world explodes shortly thereafter. (What ", (emph) "was", " that crystal, anyway?)"; new_line; rtrue; ], daemon [; self.number = self.number + 1; switch (self.number) { 1: "^Gah. Feel that heat! This is too much to endure for long!"; 2: "^Your blood feels like it's about to boil! Time to go!"; 3: deadflag = 1; "^You pass out from the heat, and fall into the VOLCANO! Ahhhhhh!!!"; } ], has light; Object volcano "volcano" Lip with name 'volcano' 'magma' 'heat' 'lava' 'fire', description "Think of the volcano as a very large, natural fondue pot. Except that it's rock fondue, not cheese fondue down there.", before [; Receive: remove noun; print "You throw ", (the) noun, " into the volcano, and it's gone forever."; if (noun==goodcrystal or IndirectlyContains(noun,goodcrystal)) { deadflag = 1; " Unfortunately, the crystal has, shall we say, an adverse effect on our friend the volcano. Don't worry, though. The volcano doesn't erupt. But the crystal starts a chain reaction that makes THE ENTIRE WORLD EXPLODE!"; } new_line; rtrue; ], has scenery container open; !------------------------------------------------------------- [ Initialise; location = Camp; score = 0; lookmode = 2; ! Verbose move Biff to Camp; move Kari to Camp; move Russ to Camp; print "^^^^^^^Biff Bradclaw smoothes back his slick greasy hair one more time before posing in front of the television camera, and says:^^ ~Welcome to Episode Seven of ", (emph) "Krakatoa Survivor Challenge!", " It's a gorgeous day on the tropical island of Krakatoa, not a cloud in the sky. Although there's plenty of smoke from that volcano, ha ha ha!^^ ~Our current champion~ -- he points to you, applause -- ~is being challenged by our newest contenders, Kari Knott, a waitress from Toledo,~ -- applause -- ~and Russ Rohoho, a late night talk show host from Honolulu.~ More applause.^^ ~And the challenge is ...~ Biff checks his cue card. ~Hey, Kari, this should be easy for you. The challenge is to make a tuna melt sandwich from the native materials on the island! Find some tuna, cheese, and bread, put 'em together and cook it, then bring it back to the camp! Whoever brings their sandwich back first, wins!~^^"; StartDaemon(distantVolcano); StartDaemon(Kari); StartDaemon(Russ); ]; [ AboutSub; "The rules for SpeedIF 10@@94-9 were:^ Write a work, set in an underground secret hideout, in which the PC must deal with misinterpretation of directions. He may be helped or hindered by a late night talk show host and a bleary-eyed waitress. At least one ending should involve earth being totally destroyed. Bonus points for including a time traveler visiting from 1888, a subplot involving a terrible accident involving food on a remote tropical island, or an alternate ending with someone never being seen again. As always, deadline is 2100 mudtime or whenever you finish. Sign here with location when done."; ]; [ BeGreetedSub; " Talking to yourself again?"; ]; [ CatchSub; if (IndirectlyContains(player,noun)) "You'll already got that."; if (second == nothing) "You'll have to tell me how to do that."; "Unfortunately, ", (the) second, " won't help you catch ", (a) noun, "."; ]; [ DanceSub; "You do a happy little dance, as if you'd just scored a touchdown."; ]; [ FishSub; if (location ~= Lagoon) "This isn't a good fishing spot."; if (parent(stick) ~= player) "Don't you need a fishing pole or stick to fish with?"; "That pointy stick is almost a fishing pole, sure, but it seems, er, incomplete."; ]; [ GreetSub; if (ObjectIsUntouchable(noun)) return; if (noun has animate && RunLife(noun,##Greet)~=0) rfalse; if (noun == player) " Talking to yourself again?"; print " ", (The) noun, " ignore"; if (noun hasnt pluralname) print "s"; " your greetings."; ]; [ MilkSub; if (noun == Kari) "Oh, that wouldn't be very polite. Not At All."; "Er, you can only milk female mammals. Did you skip biology class the week they covered that?"; ]; [ XyzzySub; "A squeaky voice says, ~Why say xyzzy here, when you can visit http://webhome.idirect.com/@@126dswxyz/sol/xyzzy.html instead?~"; ]; [ PlughSub; "A squeaky voice says, ~Oh, very well. You can visit http://webhome.idirect.com/@@126dswxyz/sol/plugh.html too. Happy?~"; ]; [ PloverSub; "A squeaky voice says, ~Ha! Not a chance, buddy.~"; ]; !------------------------------------------------------------- Include "Grammar"; Verb meta 'about' * -> About; Verb 'catch' * noun -> Catch * noun 'with' held -> Catch; Extend 'cut' last * noun 'with' held -> Cut; Verb 'debone' = 'cut'; Verb 'dance' * -> Dance * 'around'/'about' -> Dance; Verb 'hi' 'hello' * -> BeGreeted * creature -> Greet; Verb 'fish' * -> Fish; Verb 'greet' * creature -> Greet; Verb 'milk' * creature -> Milk; Verb 'xyzzy' * -> Xyzzy; Verb 'plugh' * -> Plugh; Verb 'plover' 'wazzum' 'zork' 'abracadabra' * -> Plover;