!---------------------------------------------------------------------------- !********************************************************* ROOM DESCRIPTIONS !---------------------------------------------------------------------------- routine PrintText00(val1,val2) { ! If we are rolling or dragging the wheel, we need to say that. ! But, only if we have just now gone to a new room. if (prev_location ~= location) { if Contains(player,wheel) { if Contains(player,rope) and IsAttached(rope,wheel) { "You drag the wagon wheel behind you." } else { "You roll the wagon wheel ahead of you"; if (location = hill) { ", which becomes a little more difficult going uphill." } elseif (prev_location = hill) { ", and it nearly gets away from you going downhill." } else { "." !Just end the sentence } } indent } } select val1 !-------------------- ! PROLOGUE LOCATIONS !-------------------- case grassland { if (val2 = 1) { !Initial Description "The meadow is vast and open, and it stretches like a green fleece to the horizon in all directions. Thick blades of grass at hip level part and bend with your long strides. Onward you go, one hand on your broadsword's sheath, the other clutching a scrap of parchment, and your water flask dangling from the opposite hip. The town of Homesdale is now a morning's journey behind you." indent "Something catches your eye as it glints in the sunlight ahead. The grass shifts and ripples endlessly under a warm breeze, and whatever it was is gone. A taller, thicker grassy patch a ways ahead probably conceals whatever it was." set_pronoun_to = distant_glinting_thing ! initial "it" works. } else { !Normal Description "You are striding through a vast meadow of thick hip-high grass. Ahead, a taller grassy patch conceals something that is probably small and shiny." } } !------------------ case at_grassy_patch { if (val2 = 1) { !Initial Description "You hurry ahead "; if (grassland.misc #2) { print "("; game_fore_dir.name; ") "; } "to the grassy patch, but notice nothing more of the glinting object. The taller grass blades sway in the gentle wind, and the whole field ripples like a vast green ocean. Something must be hidden here, down in the thicker grass, but you can't see it." AddScore(1) !For going ahead to grassy patch. } else { !Normal Description "The grassland spreads to the horizon in all directions. Homesdale is a brisk half day's walk "; print game_back_dir.name; " of here, but your quest is ahead, to the "; print game_fore_dir.name; ". "; if (pendant is moved) { !If it's here, then we chopped down the grass. print newline !Nothing more to say, so end the line. } else { "You have come upon a taller patch of grass. It sways in the gentle wind, concealing something small and shiny." } } } !------------------ ! PART 1 LOCATIONS !------------------ case farm_path { select val2 case 1 { !Initial Description print "Your journey brings you "; game_fore_dir.name; ", through acres of grassland, into a sparsely wooded area, along a narrow stream for a short ways, and eventually across an overgrown path. It meanders forward, so you follow it for a while." indent "The path begins to show more signs of recent use, and it widens some. It turns briefly, angles through outcroppings of rock, and soon runs straight eastward, like a channel between decrepit fences to the north and south." } case 2 { !Normal Description "The well-worn path trails away to the west, back the way you arrived. It continues eastward between decrepit fences, which are set off a few paces to the north and south." } case 3 { !Short Description. if (prev_location = location) { !Only seen after an "undo" in a room re-listing. "You stand again on the well-worn path, leading east to the farmstead." } else { "You return to the well-worn path, which leads away from the farmstead." } } } !---------------------- case house { select val2 case 1 { if (not sword.misc #1) { !The sword should still be sheathed from the chapter !start, but just in case the player has unsheathed it. !This is important, because when the old lady looks at !the sword, what she's actually looking at is the !pendant hanging from the sheath. "You sheathe your sword, then continue eastward. "; sword.misc #1 = true !Now it's back in the sheath. } "The path leads around a bend and downward. You come upon a two-story farm house where the trail opens up to form a dusty front yard. Both fences angle away, allowing more yard space to the north and south of the modest dwelling. They converge again east of the house, ending to either side of wide and open barn doors. "; AddScore(4) !For arriving at the house. } case 2 { !Normal Long Description "You stand in the dusty yard of a modest two-story farm house."; " A fence to the north and another to the south angle widely around the sides. They meet the front of a large barn to the east, behind the house. "; } case 1,2 { !Additional text for initial and long descriptions. "Wooden gates lead through the fences north and south, although the northern one lies crushed and decaying on the ground to one side." } case 3 { !Short Description if (prev_location = location) { !Only seen after an "undo" in a room re-listing. "You stand in the dusty yard of a modest two-story farm house." } else { "You return to the dusty yard at the modest two-story farm house." } } } !---------------------- case hill { select val2 case 1 { !Initial description for the Livestock Hill. if (old_location = house) { !First entry to the room was from the house. "Through the gap where a gate used to be, you walk north over and around low jutting boulders, up the side of a short hill. "; } else { !Only other way we can enter is from the barn. "Out the barn's northwestern exit, you follow a well-packed path as it angles up the side of a short hill. "; } "Several goats, some sheep, pigs, and countless chickens scatter at your approach. They flee to lower ground, into the northern fields." indent "In a moment, you are left alone with a single brave bull. It seems confused and frustrated at a feeding trough that is entirely devoid of grain." indent "An upturned wagon rests uselessly to the side of "; if (old_location = house) { "a well-packed path that angles southeast down the hill. The path comes to an end where the downward slope meets the barn's north-facing entrance." } else { "the path leading back to the barn. To the south, beyond low jutting boulders, a gap in the fence leads back to the farm house." } ! The bull doesn't become "known" until we interact with it, ! and all we might do is just go here. There is some minor ! differences in text (picking out a harness), so we might ! as well flag the bull as known, the first time we see it. bull is known !Yep, the bull is here alright. AddScore(8) !For arriving at the hill. } case 2 { !Normal long-desc text "For lack of a more elegant description, you deem this the \"feeding hill\". It's little more than a hilly mound, but the name seems apt. "; if InList(bull, found_in, location) { ! If the bull is here, so is the wagon. They go at the ! same time, so no real need to check for both of them. ! At least, no need to check it in the "bull" section. "One black bull stands before a long feeding trough"; if (harness in bull) { ", wearing the harness. "; !It's wearing harness. } else { ". "; !nothing else, but space it out before next. } if (grain in trough) { "It seems more content now that you have brought grain." indent } else { "If such a thing is possible, its mood seems to sour by the moment. It dips its head into the empty trough, glances up, beats a hoof against the dusty ground, side-steps, and throws \"get away\" glances toward you." !End the line so not create huge para. indent } } if (wagon.found_in = location) { "A wagon lies tipped to one side, near a well-packed path that angles downward and away to the southeast. The path ends at the northern entrance to the barn. "; } else { "Only a long feeding trough remains, now that the animals have fled and the cart has been pulled away to block the barn's northern entrance." !End line. indent !So that "to the south" starts a new line. } "To the south, over and around low jutting boulders, is the broken gate that leads back to the farm house." } case 3 { !Short Description. if (prev_location = location) { !Only seen after an "undo" in a room re-listing. "You stand on a small hill, north of the farm house." } else { "You return to the feeding hill, north of the house." } } } !---------------------- case barn { select val2 case 1 { !Initial Description ! It's safe to have the animals leave NW upon initial entry, ! because the only way the NW exit can be blocked is if we ! have already been here at least once, to gather the stuff. "Pigs run and chickens scatter "; if (old_location = hill) { !We entered from the hill. "past your legs "; } else { !We entered from the house or orchard. !Well, if it's our first entry here, the only way we !can enter from the orchard first is if we find the !key at the broken gate, go to the orchard, and chase !the girl here. But, I suppose that *is* possible. "toward the northwest exit "; } "and out to the open pasture as you enter. "; AddScore(5) !For arriving in the barn. } case 2 { !Long Description ! We have to check for the wheel here *and* in short_desc, ! just to accomodate players using both of the modes. if (prev_location = cellar) and (wheel in location) and \ Contains(player,rope) and IsAttached(rope,wheel) { "You climb carefully up the ladder, "; PrintMessage(12,wheel,2) !And then finish that we pull. indent !Because we're doing a long desc, we need it. } else { "An odor from years and years of livestock is strong in here. "; } } ! Both initial_desc and long_desc share the rest of this text. ! Hopefully users will grasp that they should *try* going "up". case 1,2 { "The barn is large inside, with a loft above and a hatch leading to a cellar below. Wide double doors "; PrintOpenClosed(barn_doors,false,false) " face west, while "; if (barn_southexit.found_in #1 = barn) { "two other smaller exits are "; } else { "a second smaller exit is "; } "northwest"; if not InList(wagon,found_on,hill) { " (blocked)"; } if (barn_southexit.found_in #1 = barn) { " and southwest"; if (barn_southexit is not open) { if not InList(wagon,found_on,hill) { " (also blocked)"; } else { " (blocked)"; } } } ". Sunlight forms awkward lines on the dusty ground as it shines through small gaps in the wood-plank walls." indent "Other than a long wooden storage bin with a tall cask against the wall beside it, you notice little else of interest."; if (harness is not moved) { " Then again, some of the gear and tackle hanging on one wall catches your eye." } elseif (barn_cask is moved) and (gate_key is not moved) { ! In case the player finds the cabinet but forgets, and the ! key is still located inside of it, here's a reminder. " Then again, the cabinet previously hidden away behind the cask catches your eye." } else { print newline !Nothing more, so end the line. } } case 3 { !Short Description. if (prev_location = location) { !Only seen after an "undo" in a room re-listing. "You are standing in a large barn." } else { if (prev_location = cellar) { "You climb up to "; } elseif (prev_location = loft) { "You climb down the ladder to "; } else { "You enter "; } "the large barn, "; if (prev_location = cellar) and (wheel in location) and \ Contains(player,rope) and IsAttached(rope,wheel) { PrintMessage(12,wheel,2) !Finish that we pull it up. } else { "where "; if (barn_cask is moved) { if (rope is moved) { if (harness is moved) { if (grain is moved) { rnd = 0 } else { rnd = 13 !Mention the bin. } } else { rnd = 14 !Mention the livestock tackle } } else { rnd = 15 !Mention the cellar hatch. } } else { rnd = 16 ! Mention the cask. } if (rnd = 0) or (random(6) <= 3) { ! If we've done everything *or* 50% of the time ! if we haven't, we'll mention just other things. rnd = random(12) !Help spread the randomness. } select rnd case 1,5,9: "the odor of livestock is as strong as ever." case 2,6,10: "slivers of light shine through small gaps." case 3,7,11: "double doors lead away to the west." case 4,8,12: "a loft is visible above you." case 13: "a long storage bin is secured to the wall." case 14: "some livestock tackle is on the wall." case 15: "a cellar hatch is tied shut with rope." case 16: "a cask sits beside a storage bin." } } } } !---------------------- case orchard { select val2 case 1 { !Initial Description !We can only get here from the north, the very first time. "If Heaven has a garden, this must be the pattern. You step into the orchard, leaving the gate open behind you. "; AddScore(7) !For arriving at the orchard. } case 2 { !Normal Long Description "The orchard is protected on all sides by a tall wooden fence. A single gate to the north leads back to the dusty yard. "; } case 1,2 { !Said in both "initial" and "long" versions of description. "A brown and green stone path winds through countless apple trees, ending to the northeast "; if (barn_southexit is open) { "at an entrance to the barn "; PrintOpenClosed(barn_southexit,true,false) print " "; !And another space before next bit. } else { if InList(barn_southexit,found_in,barn) { "at a solid wooden panel "; PrintOpenClosed(barn_southexit,false,false) ", which blocks an entrance into the barn. "; } else { ! Here, we've never really "noticed" the panel, so ! don't yet mention it by name. That comes later. "on this side of the large barn. "; } } if (val2 = 1) { "A gate to the north leads back to the dusty yard. "; } "All around, pink and white blossoms grace the ground. "; if (val2 = 1) { "The air is fresh and sweet." } else { "The trees cast a pleasant shade." } } case 3 { !Short Description if (prev_location = location) { !Only seen after an "undo" in a room re-listing. "You are standing in the shade of the apple orchard." } else { "You step into the shade of the apple orchard." } } } !---------------------- case cellar { select val2 case 1 { !Initial Description ! Big clues here as to the twist ending. A slimy green ! hopper? That's a frog. And the cellar is more cavelike ! than you would have "imagined" -- he's imagining it all. "You steady yourself on the narrow steps and descend into the cellar. The bottom is much farther down than you would have suspected. The light fades as the only source of it grows more distant above you. When you do reach the bottom, the open hatch is but a small square of dim light at the top of the ladder." Indent "It's enough. Dark and enclosed places are as familiar to you as the bright and open land. Once, you battled a slimy green hopper for seven hours straight, at the end of a cavern tunnel in a chamber scarcely larger than this one. That, however, is a different tale." Indent "The cellar is more cavelike than you would have imagined. "; AddScore(9) !For arriving in the cellar. } case 2 { !Normal Long Description "The cellar seems more like a cave. The walls are solid but damp, and it offers precious little room for storage. In fact, it isn't being used for storage at all right now. "; } case 1,2 { ! This is the meat of the room description, said ! in both the initial_desc and long_desc versions. "A large and complicated contraption dominates the room. "; if (val2 = 2) { PrintMessage(2,contraption,2) !Describe the contraption. print newline !Go ahead and end the line. We said enough. Indent } "A long tapestry hangs from one wall, opposite the contraption." } case 3 { !Short Description if (prev_location = location) { !Only seen after an "undo" in a room re-listing. "You are standing in "; } else { "You descend the steps into "; } "the cavelike cellar." } } !---------------------- case loft { !1=Long, !2=Normal, !3=Short, !4=Window Entry Text select val2 case 1 { !Initial Description if (prev_location = hill) { PrintMessage(0,val1,4) !Print the "entering" text. indent !Because this is just the first (short) paragraph. AddScore(6) !For entering the loft. } else { "You climb the ladder and step over onto the floor of the loft. "; } ! None of this is important. I don't want to make the player ! spend time figuring out the significance, so only say this ! all once, in the "initial" text for the loft's description. "It's close enough to the barn's angled roof that you can't stand entirely upright. The floor boards give a little, but the loft seems sturdy enough. "; } case 2 { !Normal Long Description if (prev_location = hill) { !We only do this once, so it's okay to print it. PrintMessage(0,val1,4) !Print the "entering" text. indent !Because this is just the first (short) paragraph. } "You stand on the floor of the barn's flat loft. "; } case 1,2 { !This goes for long and short descriptions both. "Little but dust and a ladder "; if (loft_ladder.misc #1) { "(leading down into the barn) "; } else { "(held aloft by a flat lever) "; } "share the space with you. The loft faces a pair of windows to the west, stretches about half way across to the east, and drops off there to the barn below." } case 3 { !Short Description if (prev_location = hill) { ! The only time this would print is if we had already ! been up here via the ladder, then we went back down ! and entered again by climbing the wagon. Unlikely. ! Well, it would also print if we block the exits from ! outside, and then we are allowed to come back up via ! the wagon even if we already did so once before. PrintMessage(0,val1,4) !Print the "entering" text. } elseif (prev_location = barn) { "You climb the ladder and return to the loft." } else { ! Only seen after an "undo" in a room re-listing. ! prev_location and location have to be the same. "You are standing in the barn's flat loft." } } case 4 { ! I'm trying to avoid things that would imply a sound, such ! as creaking or snapping or whatever. He couldn't hear it. "You haul yourself up to the roof and walk carefully to the windows. The boards underfoot begin to sag. Before they can break, you "; if (barn_windows is open) { "climb into the loft." } else { "lift the windows and climb into the loft." } return !Here, we don't do anything more with descripts. } } !------------------ ! PART 2 LOCATIONS !------------------ case campsite { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "You arrive in a small clearing beside the stream at the same time you notice something overhead. It becomes more obvious here, where less of the sky is blotted out by the high, full foliage." indent "A small rectangular shadow falls over the charred wood of some prior traveler's abandoned campfire. It creeps toward the exposed roots of a towering maple, growing gradually, as if something far above is coming across and down from the "; print game_back_dir.name; "." } case 2 { !Normal/Long Description "A widening stream passes near this abandoned campsite, in a less forested clearing. A rectangular shadow creeps slowly over charred logs in a shallow pit, toward the base roots of a towering maple tree. It's midday, and even though your journey is two more days and many miles ahead, this seems unusual enough to garner your attention." } case 3 { !Short Description !Only seen after an "undo" in a room re-listing. "You are standing near a maple tree, in a campsite clearing." } } case treetop { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "Even with well-placed branches along the way, it takes longer than expected to scale the tree and reach a point near the top where you have a good view of the sky. By now, the entire campsite is in the shadow of the large dark rectangle flying in from overhead. You do have a better view from here, but you're looking up at the bottom of...\n" new_pause : PrintMessage(7,5) !Player is picked up by net. forest is distant !Because we're now hanging above it. stream is distant !Again, because we're now above it. MovePlayer(trawl) !And then move the player to trawl net. AddScore(28) !For climbing up the tree } !Note that there aren't any other descriptions. Once the player !is up here, they get moved to a different location automatic. } case trawl { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "You notice the low-hanging trawl net a little too late. In one moment, you are marveling at a sight that defies logic; a sight unrivaled by most of your experiences (and you've seen your share of wonders). The next, you are caught and yanked forcefully from the upper limbs by a long net that dangles over one side of the flying barge." indent "To hang on is instinct. To find a way off of it is common sense. To hang freely so high above the ground is a little exhilarating." indent "At least you're on it, not inside it. It hangs from hooks over the side of the barge. You can just see the edge of the deck from down here. The tops of trees race by, below." } case 2 { !Normal/Long Description. "Hanging above the land on a trawl net attached to hooks over the side of a flying barge, you take a moment to look around. The underside of the barge seems perfectly suited to travel by sea, not for riding the wind over a forest, far from any body of water but the stream below and behind." stream.found_on #2 = trawl !We've seen it, so allow listing. } case 3 { !Short desc - shown after an undo. Since we can't return here, !there is no reason to give a "coming back" short desc version. "You are hanging on a trawl net over the side of a flying barge." } } case deck { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "You climb quickly up the net, toward the edge of the deck, and without a moment to be spared. As you heft yourself over the edge, the barge begins to plow through treetops. The net is ripped away, lost to the trees. Over the side, you can see that the forest will soon give way to an expanse of lowland." indent "Cargo crates are everywhere on the flat deck, although many have been tipped and unstacked. A pillar in the center of the deck, about three times your height, looks at first glance to be a mast with no sail." indent "What's most disconcerting, however, is the spider infestation. These spiders are larger than you, with eight hairy multi-jointed legs, glassy red eyes, and fierce mandibles. They scurry about, gathering crates and approaching the edge as the barge descends." indent "An understandably pale captain does his best to ward them back, but his actions prove ineffective." AddScore(29) !For climbing up trawl, onto the deck. } case 2 { !Normal Long Description. select deck.misc #1 ! Man... am I going overboard writing a completely different ! room description for each of the five state conditions? ! I could probably re-use some of it, but I have slightly ! different emphasis at each stage. I guess it's worth it. ! IF-Comp judges better really like this, or I'll be sad. !WHEN DECK MISC #1 = 0 -- Spiders here, and attacking. case 0 { select count_spiders case 1 { !Description when only one "attackable" spider remains. "Spiders jump to freedom from port and starboard, taking crates of cargo with them. Fewer remain, and all but a single gray one are perched at the edge, ready to leap." indent "Despite the disorganized theft of so many crates, plenty of cargo remains. Some have been shoved to aft, near the entrance to the cabin and the side steps that lead up to its second floor. A few are near the center post, and a few more have been pushed to the sides, against the ridged lip of the deck. Spiders and crates are gone from the starboard side ladder, and from around both wing slots." } case 2 { !Description when two "attackable" spiders remain. "Most of the spiders are now gathered around the edges of the barge, waiting for the ground to rise to a point that will make it safe to jump away. Each one holds a crate of cargo with its front legs. Fewer spiders still scurry about the flat deck, "; } case 3 { !Description when all three "attackable" spiders remain. "The deck is in turmoil. Huge spiders scurry and crawl over the cargo crates, "; } case 2,3 { !This gets said in both cases: "around the central pillar, near the cabin to aft, up the side steps that lead to the cabin's upper floor, near the short ladder leading down off the starboard side, and around the wing slots set into the ridged lip of the deck on both sides." } } !WHEN DECK MISC #1 = 1 -- Barge landed, and spiders approach. case 1 { "The barge has landed in the lowland"; if (mast.misc #1) { ". "; !Nothing else to say, if the rails are up. } else { ", where every horizon is the same fading green line. "; } "A mast-like post in the center of the deck stands about three times your height. A cabin is aft (currently "; print barge_aft_dir.name; "), and a ladder "; if (mast.misc #1): "(blocked now, outside the rails) "; "leads down off the starboard side"; if (mast.misc #1) { ". "; !Direction isn't really important. It's blocked. } else { print " ("; barge_starboard_dir.name; "). "; } "Steps lead upward to the cabin's second floor. Crates of cargo are scattered about the deck"; if InList(cargo,misc,mast) { ", but three are stacked step-like at the center post."; } else { "."; !A period to end the line because not stacked. } if (mast.misc #1) { print newline !We don't really see the slots now. } else { " Slots where wooden wings attach are cut into the deck on both sides, out of place on a barge that was probably once an oceangoing vessel." } indent if (mast.misc #1) { "Huge spiders beat their hairy legs at the fence-like rails bounding the barge, but they seem unable to jump or climb over. The rails succeed in keeping them off." } else { "Having left their stolen cargo behind, a horde of huge spiders approaches from the "; print barge_aft_dir.name; ". You see them jump and roll over one another in their efforts to catch up and board the barge again. At this rate, they'll be here soon." } } !WHEN DECK MISC #2 = 2 -- Barge is airborne again. No spiders. case 2 { print "The barge sails through the air"; if (mast.misc #1) { ", but with wooden rails surrounding the edges, you can see little but sky. "; } else { " over lowland and an occasional hill. "; } "Clouds darken and thicken a little, the farther "; print barge_fore_dir.name; " you go. "; if (mast.misc #1) { ! We could say this in both instance, but let's avoid ! information overload wherever possible. At the end, ! we'll say something similar when the rails are down. "The barge seems unstable. Even though it's amazing that it can fly at all, this doesn't feel right." } else { "Wooden wings are clamped into slots in the ridged lip at the edges of the deck (one to starboard, the other to port). They extend outward, angled slightly to aft." } indent !Because we'll have another paragraph, below. } !WHEN DECK MISC #3 = 4 -- Barge is flying again, after mill. !This comes before the main deck description, below. case 4 { "The barge sails through air, high above the land. It's smooth and steady now, heading on a"; if (barge_fore_dir = e_obj): "n"; print " "; barge_fore_dir.name; "erly course. Dark clouds are gathering above. It looks like a storm is coming." indent !Because the next part is another paragraph. } case 2,3,4 { ! The rest of the text becomes the same for three versions. "The deck is long and flat, with a mast-like pillar in the middle and a cabin to aft (currently "; print barge_aft_dir.name; "). Cargo crates litter the deck"; if (cargo.misc #1 = mast) { ", although three are stacked step-like at the mast. "; } else { ". "; !Nothing else to be said about cargo. } "Stairs lead upward to the cabin's second floor, and a ladder "; if (mast.misc #1): "(blocked now, outside the rails) "; "leads down off the barge on the starboard side"; if (deck.misc #1 = 3) and (not mast.misc #1) { print " (currently "; barge_starboard_dir.name; "). "; } else { print ". "; !A period is required after "off the barge" } if InList(starboard_wing,found_on,deck) { "Wooden wings are clamped into slots in the ridged lip at the edges of the deck (one to starboard, the other to port). They extend outward, angled slightly to aft."; } else { "A wooden wing is clamped into the slot at the port-side edge"; if (sail_arm in starboard_slot) { ". On the other side, one wooden sail arm from the windmill now serves the same purpose."; } else { ", but the starboard slot holds nothing."; } } if (not mast.misc #1) and (deck.misc #1 = 2) { " The barge still shakes and dips from moment to moment. Perhaps now that the rails are down, the captain may find a reason for the erratic flight." } else { print newline !Nothing else needs to be added. } } !WHEN DECK MISC #3 = 3 -- Barge has landed at the windmill. !This comes after the main deck description, above. case 3 { !Another opportunity to re-use elements of prior parts. !The stone path in the orchard was brown and green too. indent !The windmill is listed in its own paragraph. "Just north of the barge, off the starboard side, is a tall windmill with stone walls of brown and green. "; PrintMessage(2,sail_arms,2) !Describe the spinning. print newline !And nothing more needs to be added. } } case 3 { !Short description, when re-entering or after an undo. if (prev_location = location) { "You stand on the deck of the barge, which "; } else { select prev_location case quarters { "You descend the steps and walk out to the deck. "; } case cabin { "You leave the cabin and return to the deck. "; } case mill { "You climb back up to the barge's deck. "; } "The barge "; } select (deck.misc #1) case 0: "is flying low and infested with huge spiders." case 1 { print "has landed in the lowland. Spiders approach from the "; barge_aft_dir.name; "." } case 2 { "is once again airborne. The spiders are far behind and gone for good." } case 3 { if (sail_arm in mast) and (cargo.misc #1 = nothing) { ! Okay. From beta transcripts, I can see that it's ! easy for players to forget that there are crates ! here. I'm going to make it easy. When you need to ! move the crates, they'll be mentioned in the short ! description. But only then. That ought to light a ! spark in the player, and they'll solve it now. "is cluttered with cargo crates." } else { "has landed near a windmill"; if (game_fore_dir = barge_fore_dir) { "." !Forward direction has not changed. } else { " and now faces west." } } } case 4: "is once again airborne. Its wing is now fixed." } } case cabin { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description ! The only way in (the first time) is from the deck. And player ! can only enter after spiders are defeated *and* the rails are ! raised. So, we can use this to trigger some actions on ! Captain's part. And this advances us automatically in story. "The captain looks relieved as you enter the cabin. He appears to have just completed some repairs to the base of the steering system. His motions are so quick that you don't even notice him work the levers and the big wooden wheel at the helm, but with an unsettling quiver, the barge rises into the air." indent "While the captain looks intently at the gauges and other instruments, you take note of the cabin itself. It's situated near the stern of the barge. Small windows look out in all directions (mere cut-outs in the walls, really), although you see little but deck and sky with the side rails raised. A ladder leads up through an opening, to the room above. The helm stands beside the forward exit to the deck (currently "; print barge_fore_dir.name; "), under another window." if (deck.misc #1 < 2): deck.misc #1 = 2 !Next: Flying again! ! Description of the captain gets shown next, since he's here. ! So, this whole initial desc ends up being almost toooo long. AddScore(36) !For entering the cabin, the first time. } case 2 { !Normal Long Description "The cabin is situated near the stern of the barge, and it looks out over the long, flat deck. Ahead (currently "; print barge_fore_dir.name; "), an open exit leads out. The helm is beside the exit, under a window. Other small windows face other directions, allowing decent visibility from here. A ladder leads up through an opening, to the room above."; if (deck.misc #1 = 2) { " The barge trembles a little, from time to time." } else { print newline !Nothing else to be added. } } case 3 { if (prev_location = location) { "You are in the cabin at the aft end of the flying barge."; if (deck.misc #1 = 1,3) { " At the moment, the barge has landed." } else { print newline !Nothing else to be added. } } else { select prev_location case deck { "You enter the cabin through the doorway from the deck." } case quarters { "You climb down the ladder and step off into the cabin." } } } } case quarters { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description !The first time in, we had to have climbed up the ladder. "Up the ladder and through the opening, you climb into the room above. "; } case 1,2 { !Initial Desc continuation, and Long Description. "This must be the captain's quarters. It's a small room with sparse furnishings; a simple bed, an aged chest of drawers, a threadbare rug of green fleece. Through an opening in the floor, a ladder leads to the cabin below. One door "; ! It just makes the sentence too clunky when I say this too. ! And it doesn't matter. We'll auto-open it from inside, anyway. !!! PrintOpenClosed(quarters_door,false,false) : " "; "leads forward "; print "(currently "; barge_fore_dir.name; "), out to the side steps that lead down to the main deck." indent ! I hate to directly reference the one from Part 1, since part ! of the "feel" I want is three completely stand-alone chapters. ! I don't want each one to depend on the ones before, and any ! references shouldn't be direct, if possible. So... here's it. "A long tapestry hangs on the port-side wall, above the bed. It looks familiar, although some of its markings differ from the one you "; if (tapestry.misc #1): "read "; else: "noticed "; "earlier this same day." } case 3 { !Short Description if (prev_location = location) { !We must have done an "undo" to be showing this. "You are in the captain's small (and seemingly unused) quarters, in a room above the cabin." } else { !When we re-enter the room. if (prev_location = cabin) { "You climb up to the captain's quarters." } else { "You take the steps leading up the side of the cabin, and enter the captain's quarters." } } } } case mill { !1=Initial, !2=Normal, !3=Short mill.misc #1 = nothing !Reset the "up" object each time. select val2 case 1 { !Initial Description - an introductory paragraph. "You turn at the ladder and descend over the starboard side, then jump out from the last couple of steps to land on the soft grassy ground. The barge is just taller than you, with sides that angle and curve out from a wide, flat bottom to the deck's edge, above." indent AddScore(43) !For going down off starboard side, first time. } case 1,2 { !Additional text printed in both cases (initial and normal). "The land rises gradually in all directions but east, making this an ideal location for the stationary windmill that stands just west of here. Its walls are brown and green stone. At intervals, stone bricks stand out to form steps that lead up the side. "; PrintMessage(2,sail_arms,3) !Describe arms as spinning near top. print " "; !Need to offset the next part with a space. PrintMessage(2,mill_door,4) !Tell that there is a door into it. if (val2 = 2) { !In the long_desc version only, mention the barge, south. " The barge is a massive structure to the south, looking incredibly misplaced in the grassy lowland."; } print newline !And then we're done... !... unless the wing is here, and then we have a bit to say. if InList(starboard_wing,found_in,location) { indent if (starboard_wing.misc #1) { "The starboard wing is leaned against the windmill, providing supplemental steps to replace the damaged lower ones." } else { "The barge's starboard wing is on the ground. It must have been damaged during the spider attack, or perhaps in the rough descent that followed. Most of the exterior is stripped away, leaving crossbars that resemble a long, flat ribcage." } } } case 3 { !Short Description if (prev_location = location) { "You stand east of the windmill and north of the barge." } else { select prev_location case steps { "You climb back down the side of the windmill."; } case in_mill { "You leave the windmill. The barge is to the south."; } case deck { "You climb down from the barge's deck."; } if (starboard_wing.found_at = location) and \ not (starboard_wing.misc #1) { " The barge's damaged wing is lying here." } else { print newline !Nothing more to add. } } } } case steps { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description - Climbing up from below. "Cautiously over the wing's rib-like crossbars, you climb high enough to reach the good stone steps. Upward you go, careful to keep your balance and maintain foot and hand contact. Upward you go, with the ground receding below. Upward you go, until the wooden blades are within reach." indent AddScore(46) !Climbing up mill steps, the first time. } case 1,2 { if (sail_arms.misc #1) { if (sail_arm is moved) { "Now that one sail arm is missing, the windmill is in a sorry state. You are perched between the remaining three blades and the stone wall, with steps leading downward." } else { "You are perched at the top of the steps, hanging to the side of the windmill, between the wall and the sail arms. Even though the sail arms are motionless, it's still a risky position. "; ! If we had been up here to see the other description ! at least once, then we can refer back to that warning. if (steps.misc #1) { "At least you won't break an arm or be knocked from the steps by the wooden blades now. "; } !And then the rest of the description. "Below, the stone steps lead down the side of the windmill. Above, the main axle supports all four sail arms." } } else { ! All four sail arms are moving. "The sail arms are close, and uncomfortably so. You are situated at the top of the steps, hanging from the side of the mill, between its wall and the four rotating blades. The outward axle, connected to the sail arms, is just above your head. It enters a hole in the wall, where gears and a drive shaft must still be working." } } case 3 { !Short Description if (prev_location = location) { !We must have done an "undo" to be showing this. "You are on the side of the windmill, behind the sail arms." } else { "You climb up the wing and the stone steps, to arrive behind the sail arms near the top of the windmill." } } } case in_mill { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "If the musty smell is any indication, this windmill has remained closed and unused for many years. A large stone basin in the center of the room holds a millstone, which is connected to a wooden shaft that runs straight upward. The interior is tall and hollow, so that the main axle high above runs to a set of gears that drive the central shaft." indent "Even after apparent years of disuse, wind still turns the sail arms outside, the main axle turns the gears, and the drive shaft turns the millstone." AddScore(47) !Entering the mill, the first time. } case 2 { !Normal/Long Descriptions "This was a grain mill, but it seems abandoned now. "; if (sail_arms.misc #1) { "The central drive shaft no longer turns, now that "; if (pipe in gears) { "the gears have been jammed with "; print Art(pipe); ". "; } else { "the millstone has been jammed with "; print Art(rusty_lock); ". "; } "A stone basin is in the middle of the room, once used for grinding grain into flour but now merely useless. "; } else { "A central drive shaft still turns a millstone in the large basin. The shaft extends upward, where it meets a set of gears. The four wind-powered sail arms (outside) drive a main axle, which turns the gears. "; } "A door "; PrintOpenClosed(mill_door,false,false) " leads out to the east." } case 3 { !Short Description if (prev_location = location) { !We must have done an "undo" to be showing this. "You are standing inside a windmill." } else { "You walk back into the windmill." } } } case cargo { !1=All - This is shown ONLY when standing on the cargo crates. select val2 case 1 { !There is only one description when standing on the crates. "You are standing on the stack of crates, beside the mast."; if (sail_arm is moved) { if (sail_arm in mast) { ! I'll tell the player exactly what to do... and it ! happens that "slide sail arm off" will work! :) ! As will other phrasings, so it should be easy now. " The sail arm is caught on the top of the post, but from here, it should be possible to slide it off." } else { print newline !We don't have to say anything more. } } else { " At present, you see nothing else of interest." } } } !------------------ ! PART 3 LOCATIONS !------------------ case wharf { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "Before it becomes too deep, you climb from the channel and continue eastward at its south side. This may lead into the stream you followed earlier in the day, countless miles behind. The ground shouldn't be so parched, and water should be rushing through the riverbed. Instead, the land is dry." indent "You come to a long wharf, just outside the village. It stands over the empty river on long pilings, with a ladder leading down to the riverbed. "; } case 2 { !Normal/Long Description "A wharf stands on long pilings and runs along the riverside a ways, west to east. A ladder leads down from the north edge, to the riverbed below. The ground is dry and cracked; lifeless. "; } case 1,2 { !This is said in both cases, to end the room description. "The fishing village is just east of here." } case 3 { !Short description if (prev_location = location) { "You stand on a long wharf." } else { select prev_location case village { "You arrive at the wharf, just west of the village." } case riverbed { "You climb up the ladder, onto the wharf." } } } } case riverbed { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Beginning of the Initial Description. "Over the side of the wharf, you descend. The ladder doesn't reach the riverbed, but it's close enough. You hop down to the parched, cracked ground." indent AddScore(54) !Percentage for arriving at the riverbed. } case 2 { !Beginning of the Long Description. "You are below the wharf, which stands on long wooden pilings that are driven into the parched, cracked ground. A ladder leads up to it. "; } case 1,2 { !Extending Initial Desc, and all of Long Desc. "To the south, a door-sized panel is set into the upwardly sloping river wall. "; if (fishnet in panel_hooks) { "A fishing net hangs down over the panel, suspended by thick metal hooks just above it. "; } else { "Several thick metal fishing hooks are secured to the dried wall, just above the panel. "; } "The riverbed runs west to east, but nothing notable is either way." } case 3 { !Short description if (prev_location = location) { "You are in a dry riverbed. A long wharf is above." } else { select prev_location case wharf { "You climb down the ladder, to the dry riverbed." } case chamber { "You exit through the open panel." } } } } case village { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Begin of Initial Description. "Just beyond the wharf, you arrive at the fishing village. According to the motherly maiden, a tyrant is living among the fisher folk of this peaceful village, but not a single man, woman, or child is to be seen. The tyrant himself is likewise absent." indent "At a glance, the village seems abandoned." indent AddScore(57) !Percentage for arriving at the village } case 1,2 { !Initial continuation, and full Long Desc. "It's not so much a village as it is a permanent encampment. A row of small huts is set off in a line, along the dry riverside"; if (val2 = 2) { " to the north. "; !Let the player know the direction. } else { ". "; !Just end the sentence, in initial description. } "Tall trees of gray and black would shade the entire area, if their lifeless limbs weren't gnarled and bare. Newer saplings look barely alive, although they are planted in odd places around the village."; if (val2 = 2) { " A wharf is to the west." } else { print newline !Don't need to mention wharf. } indent "In the middle of it all is a wide water-well, bricked in brown and green stone. "; if InList(slab,found_on,well) { "A round stone slab covers the opening, and a "; } else { "A "; !Begin the sentence this way instead. } "wooden frame holds a simple cranked windlass above." } case 3 { !Short description if (prev_location = location) { !Probably the result of an undo. rnd = random(4) select rnd case 1: "Small huts are to the north." case 2: "Gnarled, lifeless trees are all around." case 3: "A stone-sided water well is here." case 4 { "Saplings, planted in odd places around the village, seem barely alive." } } else { select prev_location case wharf { "You return to the village, from the riverside wharf." } case east_tunnel { "You climb the chain and crawl out through the well." } } } } case east_tunnel { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description "You lower yourself into the well, half climbing and half sliding down the strong chain. The bottom is dimly lit from the well's opening above, and the tunnel walls are shrouded in shadows. The ground is hard and dry." indent "At the far end of the tunnel (to the west), you can see a large, ornate door. Another door of a smaller and simpler design is much closer, to the northwest." indent "Here, spaced somewhat from the dim light that shines in from overhead, a metal plate is embedded in the ground." AddScore(61) !Arriving at the east tunnel first time. } case 2 { !Normal/Long Description "The tunnel leads west, ending at a large, ornate door at the far end. A smaller, simpler door is much closer, to the northwest. A chain hangs down from the well's opening, above. It leads back up to ground level." indent "A metal plate is embedded in the tunnel floor." } case 3 { !Short description if (prev_location = location) { !Probably the result of an undo. "You are standing at the east end of a long tunnel." } else { select prev_location case village { "You climb down the chain, into the tunnel." } case west_tunnel { "You hurry back to the east end." } case hall { "You leave through the rapidly closing door and return to the tunnel." } } } case 1,2,3 { ! In all cases, list what's on the metal plate, if anything ! at all is on it. Otherwise, player might lose track of it. if Child(plate) { WhatsIn(plate) } } } case west_tunnel { !1=Initial, !2=Normal, !3=Short rnd = false !It'll be used as a flag. Maybe. select val2 case 1,2,3 { ! In all versions, start with this if we just changed locations ! and the door is open. This is because the door is going to ! be automatically close (via the fuse) on this turn, afterwards. if (ornate_door is open) and (prev_location ~= location) { "You run to the west, toward the open doorway. It takes several seconds to reach the other end of the tunnel." if (val2 ~= 3) { ! Only indent when it's not the "short" description. ! This is because we won't be saying anything then. ! And the fuse is going to print its own blank line. indent !Because we'll be beginning another line. } rnd = true !flag that we ran to the west. } } case 1 { !Beginning of the initial description. !This should only print if we weren't trying to race the door. if not rnd { "You follow the tunnel straight west, until it ends. "; } AddScore(62) !Arriving at the west tunnel first time. } case 1,2 { !Initial Continuation, and Long Description "The west end of the underground tunnel is much like the east end, but darker. The walls and the ground are dry, and it feels colder here."; ! Don't mention the door, if we were running for it. That's ! because it has already been mentioned, before this part. ! And, it'll be mentioned again, when the fuse closes it. if (not rnd) { " A large, ornate door is to the west."; } " A "; if (plate.misc #1): "pressure "; "plate is in the floor at the other end of the tunnel." } case 3 { !Short Description if (prev_location = location) { ! Probably the result of an undo. Actually, it will also ! show this when the tyrant forces player out, because the ! prev_location value never gets changed in that event. "You are standing by a large and ornate door." } elseif (prev_location = east_tunnel) { if not rnd { !The only other way is from the east. "You arrive at the large, ornate door." } } } } case hall { !1=Initial, !2=Normal, !3=Short select val2 case 1,2 { !Initial Description and Long Description. if (val2 = 1) { "You hurry in through the door, ducking inside before it can close. You stop short, though, as the floor ends in a long drop." indent } "The room is enormous, but you stand on a long ledge near the top of its south side. "; if (val2 = 1) { "Your sense of direction places it deep under the village, and partially under the riverbed." indent } print "Tall tapestries line the south wall. A door is to the southeast."; if (val2 = 1) { print " "; !A space, before the next part. } else { print newline !The first paragraph is long enough indent !Blank line before the next paragraph. } if (lights.misc #1 > 0) { PrintMessage(2,lights,7) } else { "In the huge northern section beyond and below the ledge, thousands of crates, boxes and casks are collected in piles and stacks. Strange lights dance and swoop throughout the chamber." } } case 3 { !Short Description if (prev_location = location) { !Probably the result of an undo. "You are standing on a ledge above "; if (lights.misc #1 > 0) { print "a "; lightform_name(lights.misc #1); "." } else { "an enormous chamber." } } else { "You hurry in. "; if (lights.misc #1 > 0) { "The illusion of a "; print lightform_name(lights.misc #1); " fills the chamber, beyond and below the ledge." } else { "Crates are stored in the huge chamber below." } } } } case chamber { !1=Initial, !2=Normal, !3=Short select val2 case 1 { !Initial Description. "On the other side of the ornate door, the ceiling drops and the floor slants upward. It isn't small enough to be cramped or uncomfortable, but it certainly doesn't follow from the size suggested by its large entrance." indent "You have barely a moment to take this in, glancing about at the modest stacks of treasure along the walls. A knee-tall tyrant stands on the shelf of a bookcase near a small table, and he seems shocked and amazed that an intruder has invaded his private sanctum." AddScore(66) !Point upon entering the chamber, first time. } case 2 { !Long Description "Small stacks of treasure line the walls in this small chamber. To one side, a short table stands near a bookshelf. A door-sized panel to the north "; PrintOpenClosed(river_panel) " and a larger, ornate door to the east are the only exits." } case 3 { !Short Description if (prev_location = location) { ! Probably the result of an undo. "You are standing in the tyrant's chamber." } else { ! We can only enter from the tunnel outside. "You step through as the large door continues to fall." } } case 1,2,3 { ! In all cases, list what's on the table, if anything at all ! is on it. Otherwise, player might lose track of it. if Child(table) { WhatsIn(table) } if (saplings.misc #1 < 2) { indent if (tyrant.misc #1 >= 3) { "The tyrant seems capable of repeating his attack for as long as you see fit to keep coming back. "; if (flask.misc #2) { "Your flask is full, though. You don't need the water, and you don't have the speed to avoid it. The tyrant "; } else { "He "; } "points a furry arm at you, growing weary of your intrusions, and another water arrow slams you back past the ornate door.\n" } elseif (tyrant.misc #1 = 2) { "Still, the tyrant is too quick. He isn't surprised by your entrance, and an arrow of water slams you backward, into the tunnel.\n" } elseif (tyrant.misc #1 = 1) { "The tyrant has stepped down from the ladder. With a sneer and a wicked grin, he raises his furry little arms. Another blast of power becomes a water arrow, slamming you backward before you can react.\n" } else { "You are too slow to react, when the tyrant turns and raises a furry little arm. A blast of invisible power becomes a liquid arrow when it strikes you in the chest, forcing you back out through the quickly-closing doorway.\n" location is visited !Otherwise it's not set. } fill_flask !A Part 3 routine that checks to see about flask. tyrant is known !Just because the player might refer to him. new_pause !Give a pause before actually going back out. MovePlayer(west_tunnel) !And then put him back outside. } else { if (tyrant is not moved) { indent Activate(tyrant_battle) !The tyrant begins to battle. "You dodge a water arrow from the tyrant, and then another. He throws up his arms for a double blast, but you step out of the way. He sneers, probably realizing that his attacks can no longer force you from the room.\n" "He takes a small sword from the wall, bounds up to the table, then lunges." AddScore(70) !Entering first time with speed enchant. } if (doors_down.timer > 1) { ! We're going to cheat. I don't want the player to be ! able to leave the room unless they deal with the ! tyrant first. But, with our increased speed, we would ! have an extra turn if we threw the pipe or whatever. ! so, force the door to close on this turn, like so. doors_down.timer = 1 } } } } !-------------------- ! EPILOGUE LOCATIONS !-------------------- case kitchen { select val2 case 1 { !Initial Description "You step away from the sink when you hear rain thumping against the roof. Out the window, it's growing dark. Is he still out there? Probably. It's getting late, though." indent "You lay the wet rag down on the counter, switch off the radio, then push plates and cups back from the edge. Without bothering to remove your apron, you turn toward the hall (to the "; print game_fore_dir.name; "). The rain isn't letting up, but he probably doesn't care." } case 2 { !Normal/Long Description "It's a small kitchen: a simple sink, a counter top that could stand to be much larger, a table and chairs, cabinets, a stove and refrigerator. Framed pictures of fruits and antique magazine covers decorate the walls.\n" "The kitchen exits into a hall, to the "; print game_fore_dir.name; "." } case 3 { !Short description "You are standing in your kitchen." } } case hallway { select val2 case 1 { !Initial Description "You walk down the hall toward the back door. You can hear the rain coming down harder now. You stop at the door, where a tall wicker basket holds a single umbrella." AddScore(74) !A point for leaving the kitchen. } case 2 { !Long Description - not really a whole heckuva lot to say. "At the end of the hall, a wicker basket sits beside the back door. The door is "; print game_fore_dir.name; ", and the back yard is beyond. Your kitchen is to the "; game_back_dir.name; "." } case 3 { !Short description "You are standing in the hallway, by the back door." } } }