!\--------------------------------------------------------------------------- DOWN3.HUG Part Three of Down by Kent Tessman (c) 19970-1998 "Inside the Plane" Including: Inside the plane Forward cabin Cockpit Accessway Rear crawlspace Landing gear bay Burning tree fuse ---------------------------------------------------------------------------\! #set PART3 #ifset MODULE #if undefined InitModule routine InitModule { MovePlayer(insideplane, true) passengerseat is moved accesspanel.between = forwardcabin, accessway accesspanel is known forwardcabin.d_to = accesspanel move newspaper to cockpit } #endif #endif !---------------------------------------------------------------------------- ! INSIDE THE PLANE: room insideplane "inside the plane" { is inside_the_plane long_desc "The interior of the wreckage looks like it has spent twenty minutes getting tossed around inside a giant clothesdryer--\ debris is everywhere: personal artifacts, pieces of the plane itself, you name it. You can look back out through the broken plexiglass onto the wing. Winding your way south through the mess will take you up the aisle toward the cockpit." out_to onwing s_to forwardcabin extra_scenery "aisle" } scenery debris "debris" { in insideplane found_in insideplane, forwardcabin nouns "debris", "mess", "artifacts", "junk", "things" adjectives "pieces", "plane", "personal" article "the" long_desc "Junk, mainly. Regardless of what it was before the crash." before { object DoSearch, DoGet { "You could spend hours picking through the debris without hope of finding anything useful." } } } scenery interiorwindows "windows" { in insideplane nouns "windows", "window", "glass", "holes", "hole", "plexiglass" adjectives "broken", "shattered", "empty" article "the" long_desc "The windows are broken. Empty holes where plexiglass used to be look out of the airplane." before { object DoEnter { MovePlayer(onwing) } } is enterable, plural, transparent } !---------------------------------------------------------------------------- ! FORWARD CABIN: room forwardcabin "forward cabin" { is inside_the_plane long_desc { "The mess only gets worse as you make your way toward the front of the aircraft. Seems everything was thrown forward during the crash: the debris is pooled at your feet here, corralled in by a couple of seats that have ripped loose and been thrown forward. The door to the cockpit to the south is "; if cockpitdoor is open "open." else: "closed." } n_to insideplane s_to cockpitdoor in_to cockpitdoor d_to 0 ! accesspanel extra_scenery "aisle", "floor", "carpet", "frame" } door accesspanel "access panel" { between nothing, nothing ! forwardcabin, accessway nouns "panel", "hatch" adjectives "access", "floor", "outline" article "the" long_desc { if location = forwardcabin "The panel is set evenly into the rough \"carpet\" of the aisle floor. It "; else "The access panel "; "is easily large enough to crawl through"; if self is not open ", were it open, although it seems firmly shut and closely fitted to its frame"; print "." } after { object DoOpen { if location = forwardcabin "You manage to work your fingers into the tight seam around the panel and heave it open." else "You give the panel a good solid push, and it opens into the cabin." } object DoClose { "The panel slams shut with a hollow bang." } } } scenery passengerseat "passenger seat" { in forwardcabin nouns "seat", "chair", "seats", "chairs" adjectives "dislodged", "couple", "airplane", "aeroplane", "plane", \ "passenger" article "a" long_desc "The seats have actually torn free of their very solid moorings and have been thrown forward into the aisle." before { object DoMove, DoPush, DoPull { if self is moved { "You've already moved it a little; the seat is too heavy to move any farther." return true } "You try to move one of the seats: the fact that it's ridiculously heavy didn't save it from being torn loose, but eventually you manage to shift it along the aisle floor. Moving the seat reveals the outline of some kind of access panel set into the floor." self is moved accesspanel.between = forwardcabin, accessway accesspanel is known forwardcabin.d_to = accesspanel } object DoLookUnder { if self is not moved "You'll have to move it first." else return false } object DoSearch { if self is not moved "There's not really much to find. Maybe if you could move it..." else return false } object DoGet { "The seats are far too heavy to lift." } } } !---------------------------------------------------------------------------- ! COCKPIT: room cockpit "cockpit" { is inside_the_plane long_desc { "The damage is the worst here--the windshield is broken from the impact, apparently of the airplane crashing nose-\ first into the ground. The pilot and co-pilot are both dead in their seats, slumped against the controls. The pilot's seat in particular seems to have actually been wrenched loose, as it sits somewhat askew. Of the plane's instrumentation, the radio catches your eye: it seems to have been destroyed. The air in here hangs heavily in the silence."; if cockpitdoor is not open " Behind the closed door is a small closet." print newline } out_to cockpitdoor n_to cockpitdoor before { location DoListen { if not object "You could swear you can hear someone breathing in here." else return } } extra_scenery "control", "panel", "controls", "glass", \ "windshield", "plexiglass", "wind", "blood", "stain", "wall" } scenery pilotseat "seat" { in cockpit nouns "chair", "seat", "chairs", "seats" adjectives "pilot's", "co-pilot's", "copilot's" article "the" long_desc "The co-pilot's chair is still secured, but the pilot's chair has been half ripped off its moorings, and it now leans at an odd angle against the wall." #ifset INCLUDE_CHARACTERS before { object DoLookUnder, DoSearch { if bradley is special return false "You peek down into the space between the pilot's chair and the wall--\n\n--and see a little boy there! He's sobbing silently--face glistening with tears--and holding what looks like a woman's purse." bradley is special move bradley to location AssignPronoun(bradley) move newspaper to purse } } #endif } scenery radio "radio" { in cockpit noun "radio" article "a" long_desc "The front of the radio has been smashed, perhaps even by the pilot's body as he was thrown forward." before { object { if verbroutine = &DoLook return false else "The radio is broken and useless." } } } corpse pilotsbody "pilot's body" { in cockpit nouns "captain", "pilot", "body", "corpse" adjectives "captain's", "pilot's", "dead" article "the" long_desc "The pilot's body is twisted sideways in his seat. A stream of blood from his ear stains the shoulder of his uniform." is hidden ! so they won't be listed is known ! because the player obviously knows before { object DoGet, DoMove { CThe(self) " is crushed in between the seat and the controls--\ you can't move it." } } } pilotsbody copilotsbody "co-pilot's body" { in cockpit nouns "co-pilot", "copilot", "body", "corpse" adjectives "co-pilot's", "copilots", "dead" article "the" long_desc "The co-pilot has an ugly gash across his face and broken glass on his lap." } door cockpitdoor "cockpit door" { between forwardcabin, cockpit nouns "door" adjectives "cockpit", "cabin" article "the" after { object DoOpen { if passengerseat is moved return false "You give the cockpit door a solid tug and it opens wide enough to pass through, bumping against one of the dislodged seats and pushing some of the debris out of the way." } object DoClose { if closet not in cockpit { move closet to cockpit "Closing the door reveals a small closet set into the cockpit wall." } else return false } } } scenery closet "small closet" { noun "closet", "cupboard" adjective "small" article "a" is container, openable, not open, static before { object { if cockpitdoor is open "You can't do anything with the closet while the cockpit door is open." else return false } object DoLook { Perform(&DoLookIn, self) } xobject DoPutIn { if object ~= fireaxe "The closet was designed to house the fire axe, not really anything else." else return false } } capacity 10 holding 0 } object fireaxe "fire axe" { in closet nouns "axe", "ax", "hatchet", "fireaxe" adjectives "fire", "small" article "a" long_desc "The fire axe is small but looks sturdy enough to be useful in an emergency." initial_desc "A small fire axe hangs in place inside the closet." } object newspaper "newspaper" { inherits flammable_class burn_duration 3 nouns "newspaper", "paper", "stories" adjective "news", "folded" article "a" size 5 long_desc { if self is not burning "By the date, it's this morning's paper. But you find yourself unable to say for sure if it is today's--it seems oddly unimportant at the moment, as do the various news stories." else "The newspaper is on fire!" } is readable } object coffeecup "styrofoam coffee cup" { inherits flammable_class in cockpit noun "cup" adjectives "styrofoam", "foam", "coffee", "beverage" article "a" initial_desc "A styrofoam coffee cup lies by the pilot's right arm. \ There's what looks like a drying coffee stain on the control panel." long_desc "A medium-sized cup with the airline logo stamped on the side. Inside the cup, a few droplets of coffee are clinging to the styrofoam." is container before { object DoLookIn { Perform(&DoLook, self) } } } component coffee "coffee" { nouns "coffee", "liquid" adjectives "drops", "drop", "droplets", "droplet", "cold" article "some" part_of coffeecup before { ! If it's not a relevant verb for the coffee itself, ! redirect it to the coffee cup object DoLook { "The coffee itself is old and black-looking." } object DoDrink { "The coffee is cold, and there's too little of it to worry about." } object { Perform(verbroutine, coffeecup) } } } !---------------------------------------------------------------------------- ! ACCESSWAY: room accessway "accessway" { is inside_the_plane long_desc { if accesspanel is open "Above you is the open accesspanel leading to the main passenger cabin. "; "Down here, you find yourself in a cramped passage leading "; if self is not special "to what's probably the "; self is special "north. Along one wall is an open control box of some kind--\ exposed wires crackle and spark." } out_to accesspanel u_to accesspanel n_to crawlspace } scenery maincabin "main passenger cabin" { in accessway noun "cabin" adjectives "main", "passenger" article "the" long_desc "You'll have to actually go up there to see anything." door_to { if accesspanel is open return forwardcabin else "The access panel is closed." } } scenery controlbox "control box" { in accessway nouns "box", "wire", "wires", "sparks", "spark", "wiring" adjectives "open", "control", "exposed", "box", "door", "damaged" article "the" long_desc "The door of the box has been bent open to expose the damaged wiring inside." is open, openable, burning before { object DoClose { "The door has been bent open: you can't close the box." } } } !---------------------------------------------------------------------------- ! REAR CRAWLSPACE: room crawlspace "rear crawlspace" { is inside_the_plane long_desc "The air is thick with smoke in here--you find your breath catching at the back of your throat as you try to breathe. \ The air was definitely clearer south, back in the accessway; going any further north could suffocate you." s_to accessway out_to accessway in_to landinggearbay n_to { if tree is not burning { "You edge your way around the corpse of the tree." return landinggearbay } else "You can't get around the burning tree!" } extra_scenery "fuselage", "floor" } object tree "tree" { in crawlspace found_in landinggearbay ! as well nouns "trunk", "branch", "wood", "bark" adjective "tree", "dry", "tough" article "a" short_desc { if self is not burning "A tree--probably broken off by the plane as it crashed--has ripped through the fuselage, through the floor of the plane in front of you." else "Spreading flames lick around the tree that has ripped through the fuselage, rapidly devouring the dry wood." } long_desc { if self is not burning { "The bark of the tree is dry, tough wood."; if self is special " There are some chips in the bark where you've chopped at it with the fire axe." print newline } else "The tree is on fire! It is rapidly being consumed by flames." } is static before { object DoHit, DoCut { if not xobject and fireaxe in player { "(with the fire axe)" xobject = fireaxe } if not xobject "You'll have to be a little specific about exactly with what you plan to do that." elseif xobject~=fireaxe { CThe(xobject) "probably isn't the best tool for the job." } else { "You swing the fire axe against the tree, chipping a little at the dry bark, but otherwise making little progress." tree is special } } object DoBurn { if self is burning { "The tree is already on fire!" return true } if not xobject { local i for i in player { if i is burning { xobject = i print "(with "; The(i); ")" break } } if not xobject { "You have nothing to set the tree on fire with." return true } } if xobject is not burning { CThe(xobject) " isn't on fire in the first place." } else { "The dry bark of the tree catches fire quickly and easily. The flames begin to spread rapidly." self is burning Activate(burning_tree_fuse, 15*TURNS_PER_MIN) } } } } global suffocating event in crawlspace { if suffocating "\nYour chest heaves as you stumble back into the crawlspace, finally able to draw more than a gasp of breath." suffocating = 0 ! player can breathe here } !---------------------------------------------------------------------------- ! LANDING GEAR BAY: room landinggearbay "landing gear bay" { is inside_the_plane long_desc "Or at least you guess that's what this low, cramped space is, since around a twisted hunk of metal to the north you can see through the smoke what you guess to be a tire or wheel. Behind you to the south is the way you came." n_to "You can't get around the barrier of twisted metal." out_to return self.s_to s_to { if tree is not burning { "You edge your way around the corpse of the tree." return crawlspace } else "You can't get around the burning tree!" else return crawlspace } extra_scenery "floor", "wall", "wheel", "tire" } scenery twistedmetal "twisted metal" { in landinggearbay noun "beam", "metal", "barrier" adjectives "twisted", "hunk", "metal", "supporting" article "a" long_desc "Used to be some sort of supporting beam, now torn free." before { object DoClimb { "There's no way to fit over or around it." } } } object fire "smoldering fire" { in landinggearbay nouns "fire", "flames", "smoke" adjective "smoldering" article "a" is burning short_desc "There's a fire smoldering here. There's quite a bit of smoke, so it's hard to see exactly what's burning. But it wouldn't be at all surprising if there weren't bigger flames on the other side of the floor or wall." long_desc return self.short_desc before { object DoGet, DoTouch, DoMove { "It's \Ifire\i." } } is static } event in landinggearbay { suffocating++ print "" select suffocating case 1 "Your eyes burn from the smoke, and your head swims from the lack of oxygen. You feel suddenly nauseous." case 2 "You cough out your breath even as you try to hold it in." case 3 "You cough even though your lungs are empty--you're going to pass out in seconds." case 4 { "You realize too late that you're blacking out. You have the slightest sensation of sinking to one knee before everything goes dark." endflag = 2 } } !---------------------------------------------------------------------------- ! BURNING TREE FUSE: fuse burning_tree_fuse "burning tree fuse" {} event in burning_tree_fuse { if self.tick = 0 { if location is inside_the_plane { "\nSuddenly you feel the plane begin to \Imove\i under your feet--"; if FindObject(tree, location) "the tree, burned mostly away, disappears as the fuselage rips free and the airplane "; else "the tree must have burned enough to allow the fuselage of the airplane to rip free. \ The plane "; "begins to slide down the slope, pitching violently as it lurches over the steep drop!"; #ifset INCLUDE_CHARACTERS if bradley in location { print " "; CThe(bradley); " cries out in terror!" } elseif parent(bradley) is inside_the_plane { " From somewhere in the plane, you can hear "; The(bradley) " cry out in terror." } print newline local printed_message print "" if mother is known and mother is unhealthy { " At least you could have helped the mother."; printed_message = true } if bradley is known and (parent(bradley) is inside_the_plane or bradley in nothing) { if bradley in nothing " At least you could have found the little boy."; else " At least you could have gotten "; The(bradley) " out of the airplane."; printed_message = true } if location is inside_the_plane { " At least you could have gotten off the plane."; printed_message = true } if printed_message " This is what you think about as the plane picks up speed.\n" #else print newline; "" #endif ! ifset INCLUDE_CHARACTERS "The body of the airplane slides off the steep drop, and there are at least two seconds of almost eerily still silence--followed by a rush of sound and heat and the last heart-stopping stab of panic you'll ever feel." endflag = 2 } else ! i.e., if not inside the plane { "\nThere's a sudden metallic ripping noise, and you turn quickly to see the airplane starting to slide down the slope--the tree must have burned away enough to allow the fuselage to tear free." "\nThe body of the airplane slides off the steep drop, and there are at least two seconds of almost eerily still silence--punctuated by an incredibly percussive \Icrack\i, an explosion, a rush of trembling earth. And you're as certain as you've ever been of anything that if you hadn't done what you'd done, that wreckage would have exploded \Iup here\i." #ifset INCLUDE_CHARACTERS ! Basically, since the player has to find Bradley ! in order to get the newspaper in order to ! successfully light the tree and send the plane ! down the slope, it's not necessary to check where ! the little boy is if this fuse goes off and the ! player has made it outside the plane. if parent(inhaler) is inside_the_plane or parent(parent(inhaler)) is inside_the_plane "\nYou didn't manage to help the mother, though. You can still hear her rasping breath and the panicky cries of her young daughter. Hopefully she'll be okay." else "\nYou saved everyone that you could. For that you should feel proud, and you deserve the grateful thanks of the surviving passengers as they give it to you." #endif ! ifset INCLUDE_CHARACTERS endflag = 1 } } }