#!../bin/jacl #ifid:JACL-002 # THE UNHOLY GRAIL # ----------------------------------------------------------------------------- # Copyright (C) Stuart Allen 1996-2008. All rights resevered. # # Written for the 1997 rec.art.int-fiction Interactive Fiction Competition. # # ----------------------------------------------------------------------------- constant game_title "The Unholy Grail" constant game_author "Stuart Allen" constant game_release 2 constant game_build 3 constant ifid "JACL-002" # ----------------------------------------------------------------------------- # CONSTANTS FOR RESOURCES IN BLORB FILE constant image_unholygrail 1 # ----------------------------------------------------------------------------- # THESE ARE USER ATTRIBUTES TO REPLACE THE SYSTEM ATTRIBUTES THAT NO # LONG EXISTS IN JACL 2.1 attribute CUSTOM1 CUSTOM2 CUSTOM3 CUSTOM4 CUSTOM5 location control_centre : control centre short the "control centre" has KNOWN south pool out pool {eachturn ifall screen has ON : lisa has CUSTOM4 : lisa(parent) = control_centre write "^~What now, Alex?~ Lisa asks, flicking off the main screen " write "once again as you enter.^" ensure screen hasnt ON set SCREEN_FADE = 8 endif if lisa hasnt CUSTOM4 write "^Lisa quickly flicks off the main screen of the control panel " write "as you enter the room. Shooting up out of her chair, " write "she turns to face you. " set lisa(status) = 3 ensure lisa has CUSTOM4 set SCREEN_FADE = 8 set LISAS_SCRIPT = 1 write "~You startled me,~ she blurts nervously.^" endif } {movement if destination = nowhere write "The only exit from here is to the south.^" else return false } {look if here has VISITED write "You are back in the control centre.^" return endif ifall switch hasnt ON : blinds has CLOSED write "With the main light off and the blinds closed, only the dim " write "glow of the emergency lighting coupled with the many coloured " write "and flashing indicator lights allows you to see. The shadowy " write "form of the chair stands before the control panel as always.^" return endall write "Used more by Lisa than yourself, this is the main control centre " write "for the research outpost's many instruments and sensors. A " write "slimline high-backed chair is fixed to the floor in front of a " write "long control panel. Above the controls stretches a wide " write "rectangular window covered by a set of " if blinds has CLOSED write "closed blinds. " else write "open blinds providing a spectacular view of the ocean horizon. " endif write "A narrow doorway leads south from here; a light switch is attached " write "to its frame. " if switch hasnt ON write "With the main fluorescent light off, the diffuse sun light " write "filters unmasked through the blinds giving the room a warmer feel " write "than before." endif write ^ } {first_hint write "When a phosphorescent screen is turned off, the image on it doesn't " write "fade instantly.^" set time = false } {second_hint write "The afterimage doesn't last long, however, and you would only be " write "able to see it if the room was quite dark.^" set time = false } {third_hint write "Straight after entering the room:^" write ">TURN OFF THE MAIN LIGHT^" write ">CLOSE THE BLINDS^" write ">EXAMINE THE SCREEN^" write "...and blob's your uncle! (sorry...)^" set time = false } {sit proxy "sit in chair" } object whale: humpback whale whales static short a "whale" parent nowhere {look_up_in_book write "whale^" write "any of various large fishlike marine mammals of the order Cetacea, " write "which have forelimbs modified as fins, a tail with horizontal flukes, " write "and nasal openings on top of the head, and which comprise the " write "suborder Mysticeti, and the suborder Odontoceti.^" } object rec_window: wide rectangular window short a "wide rectangular window" {examine : look_through if blinds has CLOSED write "The window is covered by a set of closed blinds.^" return endall write "Looking through the open blinds you can see the shallow arc of the " write "ocean horizon spanning the heads of the lagoon.^" } object doorway: doorway door frame short a "doorway frame" {enter proxy "s" } {look_through write "You can see out into the docking pool.^" } {examine write "There is a light switch attached to the door frame.^" } object blinds: blinds has CLOSABLE DAMAGED PLURAL short some "blinds" {close if blinds has CLOSED write "The blinds are already closed.^" return endall write "You reach over the control panel and turn the rod until the blinds " write "close.^^" ensure blinds has CLOSED look } {open if blinds hasnt CLOSED write "The blinds are already open.^" return endall write "You reach over the control panel and turn the rod until the blinds " write "open.^^" ensure blinds hasnt CLOSED look } {examine write "Cheap and incredibly " if blinds has DAMAGED write "dusty" else write "shiny" endif write ", the blinds are currently " if blinds has CLOSED write "closed. " else write "open. " endif write "A clear plastic rod dangles from one side.^" } {clean if blinds hasnt DAMAGED write "They are already quite clean now, thank you.^" return endall write "That's very thoughtful of you.^" ensure blinds hasnt DAMAGED } object rod: plastic rod short a "plastic rod" {examine : take write "The plastic rod is attached to the blinds and can be turned in order " write "to open and close them.^" } {turn if blinds has CLOSED execute "open_blinds" else execute "close_blinds" } object light: main fluorescent light has ON short a "main fluorescent light" {turn_on proxy "turn on switch" } {turn_off proxy "turn off switch" } object switch: main fluorescent light switch has ON short a "light switch" {examine write "Simple, yet sturdy, the switch is in the " if switch has ON write "on" else write "off" endif write " position.^" } {turn_off_override if switch has ON proxy "flick switch" else write "The light main fluorescent light is already off.^" endif } {turn_on_override if switch has ON write "The light main fluorescent light is already on.^" else proxy "flick switch" endif } {flick : turn : press : pull : move if switch has ON write "You flick the light switch into the off position causing the " write "main fluorescent light to go out.^^" ensure light hasnt ON ensure switch hasnt ON look return endall write "You flick the light switch back into the on position causing the " write "main fluorescent light to flicker briefly then come on. " ensure light has ON ensure switch has ON look } object chair: red leather chair short a "red leather chair" {sit_on_override if player has SITTING write "You are already sitting down.^" return endall write "You set over to the chair and sit down in it, swivelling around " write "to face the control panel.^" ensure player has SITTING } {examine write "The chair is made from fine-grade red leather and sits perched " write "upon a single steel column directly in front of the control panel.^" } object c_pass: my civilian identification pass id card has WEARABLE WORN long "Your civilian identification pass is here.^" short your "civilian pass" parent kryten mass 2 {examine : read write "Your name, Dr Alex Meadows, and your authority level are printed " write "beneath a small photograph of you looking your worst. On the back of " write "the pass is a bar code strip, an expiry date and your signature.^" } {show_to_lisa if c_pass hasnt CUSTOM4 write "Lisa laughs at your mocking parody of the military security " write "protocols that you find so much humour in following to the " write "letter.^" ensure c_pass has CUSTOM4 return endall write "Jokes are never quite as funny second time round.^" } {show_to_guard write "~I'm sorry, Dr Meadows,~ the MP says stepping in front of you, ~only Dr " write "Zuckerman, or personnel personally signed in by Dr Zuckerman, may pass " write "this point.~^" } object signature: signature short your "signature" parent c_pass {examine : read write "A barely discernable squiggle.^" } object bar_code: bar code strip short a "bar code" parent c_pass {examine write "The thought has often crossed your mind to swipe your card at the " write "supermarket to find out what you're worth, but so far you've resisted.^" } object authority: authority level short your "authority level" parent c_pass {read : examine write "Your pass clearly identifies you as a civilian.^" } object lisa: lisa has ANIMATE FEMALE POSSESSIVE long function short name "Lisa" mass heavy quantity 20 {long if lisa(status) = 0 write "Lisa is here, sitting in the chair.^" return endif if lisa(status) = 1 write "Lisa, bound and gagged, is kneeling on the floor.^" return endif if lisa(status) = 2 write "Lisa is standing with her pistol raised towards the middle " write "aged man.^" return endif if lisa(status) = 3 write "Lisa is here, standing close by.^" return endif if lisa(status) = 4 write "Lisa is here poining her pistol at the stranger.^" return endif } {ask_about_speaker write "~It's a speaker. You know, those things that sound comes out of.~^" } {ask_about_screen write "~It's a radar screen. Well, more or less,~ Lisa begins to explain. ~I " write "don't really understand all the details, but it's some sort of new " write "ultra-low frequency design for use underwater.~^" } {ask_about_red_light write "~As long as it stays off, it's nothing to worry about,~ Lisa responds " write "rather evasively.^" } {ask_about_dial write "~It's just a simple volume control,~ Lisa quips.^" } {untie if lisa has CUSTOM3 write "~Get away from her,~ the stranger " if stranger(parent) = hangar_north write "warns" else write "calls out from across the room" endif write ". Once again, you decide to obey.^" return endif return false } {apologise if lisa has CUSTOM3 write "Lisa seems far from impressed by your attempts at reconciliation.^" return endif if here = bathroom write "~Don't apologise, just get out!~ Lisa exclaims.^" return endif write "~It's all right, just don't do it again,~ Lisa says with a smile.^" } {hug if lisa has CUSTOM3 write "Lisa seems far from impressed by your attempts at reconciliation.^" return endif if kryten has CUSTOM3 write "All right, once was enough.^" return endif write "You and Lisa indulge in a friendly hug.^" ensure kryten has CUSTOM3 } {examine if lisa has CUSTOM3 write "Kneeling on the floor, bound and gagged, Lisa looks quite " write "understandably upset.^" return endif if lisa has CUSTOM2 write "Barely breaking her gaze to blink, Lisa is standing with her " write "pistol pointed at the stranger.^" return endif write "Tall with straight black shoulder-length hair, Lisa's " write "immaculately pressed uniform and permanent expression of intense " write "concentration belie her generally easy going nature. Having worked " write "together for the last three months, spending much of the time here " write "in cramped confines, you have come to know and trust each other well. " execute "+contentsINSERT CASSETTE IN RECORDER^" write " >PRESS PLAY^" set time = false } object wooden_chair: simple wooden chair short a "simple wooden chair" long function mass 25 {long if wooden_chair hasnt TOUCHED write "A simple wooden chair stands before the writing desk.^" else write "A simple wooden chair stands here.^" } {sit_on_override if player has SITTING write "You are already sitting down.^" return endall write "You sit down on the simple wooden chair.^" ensure player has SITTING } {examine write "Typical of standard military furniture, the wooden chair has " write "absolutely no aesthetic appeal whatsoever.^" } object sofa: comfortable-looking comfortable looking sofa lounge short a "comfortable-looking sofa" {examine write "Although well padded, the sofa's drab grey fabric is positively " write "uninspiring.^" } {feel write "The comfortable-looking sofa could be equally well described as the " write "comfortable-feeling sofa.^" } {sit_on_override if player has SITTING write "You are already sitting down.^" return endall write "You sit down on the comfortable-looking sofa.^" ensure player has SITTING } object bathroom_door: bathroom door has CLOSABLE LOCKABLE short a "bathroom door" {enter if here = quarters proxy "n" else write "You are already in the bathroom.^" endif } {unlock_override if here = quarters write "You can only unlock the bathroom door from the inside.^" set time = false return endall write "You flip the latch into the unlocked position.^" ensure bathroom_door hasnt LOCKED } {listen_to if here = quarters if bathroom_door has LOCKED write "I'm starting to worry about you.^" return endall write "You don't hear anything out of the ordinary.^" } {lock_override if here = quarters write "You can only lock the bathroom door from the inside.^" set time = false return endall write "You flip the latch into the locked position.^" ensure bathroom_door has LOCKED } {close_override ensure bathroom_door has CLOSED if here = quarters write "You gently pull the door closed.^" else write "You gently push the door closed.^" endif set quarters(north) = nowhere set bathroom(south) = nowhere } {open_override ensure bathroom_door hasnt CLOSED if here = quarters write "You gently push the door open.^" else write "You gently pull the door open.^" endif set quarters(north) = bathroom set bathroom(south) = quarters } {examine write "The bathroom door is " if bathroom_door has CLOSED write "closed." endall if bathroom_door hasnt CLOSED write "open." endall if here != bathroom write ^ return endall write " There is a small latch, " if bathroom_door has LOCKED write "currently in the locked position" endall if bathroom_door hasnt LOCKED write "currently in the unlocked position" endall write ", on the edge of the door.^" } {knock_on if bathroom_door hasnt CLOSED write "There really isn't any need, the bathroom door is wide open.^" return endall if LISAS_SCRIPT > 28 if LISAS_SCRIPT < 35 if bathroom_door hasnt CUSTOM1 write "~Hang on, I won't be a minute,~ Lisa calls from " write "within the bathroom.^" ensure bathroom_door has CUSTOM1 return endall if LISAS_SCRIPT > 28 if LISAS_SCRIPT < 35 write "~Go away!~" return endall return false } object kitchenette: kitchenette recess kitchen short a "kitchenette" {enter write "The kitchenette is nothing more than a slight recess in the wall.^" } {examine write "The kitchenette's facilities are modest, but more than enough to " write "support your fledgling culinary skills.^" } object poster: lisas lisa's blue whale poster short a "whale poster" {take write "The poster belongs to Lisa, so it would only be polite to " write "leave it where it is.^" } {examine write "A bit tattered after the trip out here, the poster was bought by Lisa " write "shortly before leaving the mainland. Your appreciation of it grows " write "daily.^" } object desk: writing desk has SURFACE short a "writing desk" quantity 30 {look_under write "You stumble across that space where your knees go when you sit at it.^" } {examine write "The writing desk is very neat and organised, thanks to Lisa. It has " write "a single drawer on its left side which is " if drawer has CLOSED write "closed. " else write "open. " endif execute "+details in encyclopedia~.^" set time = false } {examine : open : read : look_in if book has DAMAGED write "Much to your distress the book is looking worse for wear after " write "being in the water.^" return endall write "You bought the book during your early days at university and it has " write "been your favourite ever since. A simple one-volume encyclopedia of " write "science, it is the ideal reference while in the field, " write "away from your main library at home.^" } object rec_speaker: microcassette cassette tape recorder's recorders speaker short a "microcassette recorder's speaker" parent recorder {examine write "The speaker on the back of the microcassette recorder is small yet " write "serviceable.^" } {listen_to if recorder has ON write "You can hear a faint hiss coming from the microcassette recorder's " write "speaker.^" return endif write "At the moment, the microcassette recorder is silent.^" } object recorder: microcassette cassette tape recorder short a "microcassette recorder" long "There is a microcassette recorder here.^" parent desk mass 4 {examine write "You use the microcassette recorder to take notes whenever you are " write "working. It has five buttons labelled play, record, fast forward, " write "rewind and stop. Tapes are manually inserted and removed (you couldn't " write "afford the deluxe model at the time), while the sound comes out of a " write "small yet serviceable speaker on its back. " if cassette(parent) = recorder write "There is currently a cassette in the recorder.^" return endall write "There is currently no cassette in the recorder.^" } {listen_to if recorder has ON write "You can hear the faint hum of the microcassette recorder's " write "motor.^" return endif write "At the moment, the microcassette recorder is silent.^" } {remove_all_from if cassette(parent) = recorder execute "take_cassette" return endif return false } {play proxy "press play button" } {turn_on : use write "To use the microcassette recorder, simply press the button that " write "matches the operation you require.^" } {turn_off proxy "press stop button" } object play: play button short a "play button" parent recorder {press : move if cassette(parent) != recorder write "Without a cassette in the recorder, there isn't much point.^" set time = false return endall if recorder has DAMAGED write "From the astounding lack of response, I don't think the recorder " write "survived being in the water.^" return endall if recorder has ON write "The cassette is already playing.^" set time = false return endall write "As you press the play button the tape begins to turn in the " write "recorder.^" ensure recorder has ON } object stop: stop button short a "stop button" parent recorder {press : move if cassette(parent) != recorder write "Without a cassette in the recorder, there isn't much point.^" set time = false return endall if recorder hasnt ON write "The cassette is already stopped.^" set time = false return endall write "You press the stop button, causing the cassette to cease playing.^" ensure recorder hasnt ON } object forward: fast forward button short a "fast forward button" parent recorder {press : move if cassette(parent) != recorder write "Without a cassette in the recorder, there isn't much point.^" set time = false return endall if recorder has DAMAGED write "From the astounding lack of response, I don't think the recorder " write "survived being in the water.^" return endall if COUNTER_POSITION = 6 write "The recorder hums indicating that you are already at the very end " write "of the tape.^" return endall set COUNTER_POSITION + 1 if recorder hasnt ON write "You press " noun1{the} ", causing the tape to skip forward " write "momentarily.^" return endall write "A high pitched squealing noise comes from the recorder's speaker as " write "your skip the tape forward.^" } object rewind: rewind button short a "rewind button" parent recorder {press : move if cassette(parent) != recorder write "Without a cassette in the recorder, there isn't much point.^" set time = false return endall if recorder has DAMAGED write "From the astounding lack of response, I don't think the recorder " write "survived being in the water.^" return endall if COUNTER_POSITION = 0 write "The recorder hums indicating that you are already at the very " write "start of the tape.^" return endall set COUNTER_POSITION - 1 if recorder hasnt ON write "You press " noun1{the} ", causing the tape to skip backwards " write "momentarily.^" return endall write "A high pitched squealing noise comes from the recorder's speaker as " write "your skip the tape backwards.^" } object record: record button short a "record button" parent recorder {press : move if cassette(parent) != recorder write "Without a cassette in the recorder, there isn't much point.^" set time = false return endall write "The record button's resistance to be pressed reminds you that you " write "removed the write-protect tab from the cassette.^" } location bathroom : bathroom short the "bathroom" has KNOWN south quarters out quarters {eachturn if WATER_LEVEL = 5 write "^Water runs from the overflowing sink down a drain in the " write "floor.^" endif } {movement if compass = south if destination = false write "That will be a bit hard with the bathroom door closed.^" return endall if destination = nowhere write "The only exit from here is back south into your quarters.^" else return false } {look if here has VISITED write "You are back in the bathroom.^" return endif write "A plain, stainless steel toilet faces a square shower cubicle in this " write "small bathroom. In between, a mirrored vanity cabinet hangs on the wall " write "above a sink. The only exit from here is back south into the common " write "area.^" } object latch: bathroom door latch short a "door latch" {examine write "The door latch is " if bathroom_door has LOCKED write "currently in the locked position.^" return endall write "currently in the unlocked position.^" } {lock : close proxy "lock bathroom door" } {unlock : open proxy "unlock bathroom door" } object vanity: vanity cabinet mirror mirrored door has CONTAINER CLOSABLE CLOSED short a "vanity cabinet" quantity 20 {examine : look_in if vanity hasnt CLOSED write "The open vanity cabinet hangs crooked on the wall just above " write "the sink" execute "+contents 0 write "You reach into the water and pull out the plug.^" move plug to player return endall write "You reach into the sink and pull out the plug" move plug to player if sample(parent) = sink write " causing the pale yellow liquid to flow down the plug hole.^" move sample to limbo return endall if fuel(parent) = sink write " causing the clear liquid to flow down the plug hole.^" move fuel to limbo return endall write ^ } {insert_in_drain write "It'll be you mopping up the mess when half the outpost floods due " write "to you blocking the drain (a thought that makes you change your " write "mind).^" set time = false } object hole: sink plug hole pvc piping short a "plug hole" {examine if plug(parent) = hole write "The sink hole has a rubber plug in it preventing any water from " write "escaping" return endall write "The plug hole is extended by a short piece of PVC piping down through " write "the floor, emptying into the lagoon.^" } object drain: floor drain short a "floor drain" {examine : look_through : look_in write "The drain is nothing more than a small hole in the floor through " write "which you can see down to the surface of the lagoon.^" } object toilet: toilet stainless steel has CONTAINER short a "toilet" quantity 5 {flush loop if noun3(parent) = toilet move noun3 to lagoon_bottom endif endloop write "You pull a small lever causing the toilet to flush.^" } {examine : look_in write "Stainless steel, and of simple design. " execute "+details 0 write " then begin to breathe normally.^" set player(quantity) + noun1(mass) ensure tank has WORN return endall write " only to find that no air comes out as the tap on the tank is still " write "closed. " write "Unable to breathe, you remove the scuba cylinder" if here has WITHOUT_AIR write " and continue holding your breath.^" return endall write .^ } {remove_override write "Unfastening the cummerbund, you slip the scuba cylinder off your " write "shoulder " ensure tank hasnt WORN set player(capacity) - noun1(mass) if here hasnt UNDER_WATER write "and begin to breathe fresh air again.^" return endall write "and begin to hold your breath.^" } {fill : fill_with_hose proxy "refill " noun1{names} } object tap: scuba cylinder tank tap has CLOSABLE CLOSED short a "scuba cylinder tap" parent tank {examine if tap hasnt CLOSED write "The tap on the scuba cylinder is turned to the open position.^" else write "The tap on the scuba cylinder is turned to the closed position.^" endif } {turn if tap hasnt CLOSED execute "close_tap" return endall execute "open_tap" } {turn_on execute "open_tap" } {turn_off execute "close_tap" } {open if tap hasnt CLOSED write "The tap on the scuba cylinder is already open.^" return endall write "You turn the tap on the scuba cylinder into the open position.^" ensure tap hasnt CLOSED } {close if tap has CLOSED write "The tap on the scuba cylinder is already closed.^" return endall write "You turn the tap on the scuba cylinder into the closed position" ensure tap has CLOSED if tank has WORN write . execute "+tank_empty" return endall if TANK_PRESSURE > 0 write ", pressing the purge button on the regulator to release air from " write "the low pressure hose.^" return endall write .^ } object regulator: regulator short a "regulator" parent tank {examine write "Attached by a low pressure hose to the tank, the regulator has a " write "comfortable moulded mouth piece. A large button on its front allows " write "you to purge any water from within it.^" } object purge: purge button short a "purge button" parent tank {press : move if tank has WORN write "You seal your mouth with your tongue then depress the purge " write "button causing a jet of air to be released from the regulator.^" return endall if here has UNDER_WATER write "A large cloud of bubbles rises from the regulator towards the " write "surface.^" set TANK_PRESSURE - CONSUMPTION_RATE if WORK_PHASE > 0 if WORK_PHASE < 5 if here = site write "^Spotting the cloud of rising bubbles, one of the divers " write "signals to his colleagues who all fire their spear guns " write "without the slightest hesitation. You have but a moment to " write "regret your actions.^" execute "+game_over" return endif endif endif return endall if tap has CLOSED : TANK_PRESSURE = 0 write "Nothing happens.^" return endif write "The regulator makes a loud hissing sound as you depress the purge " write "button.^" set TANK_PRESSURE - 1 } object spg: submersible pressure gauge gauges spg short a "submersible pressure gauge" parent tank {examine : read write "Attached by a high pressure hose to the tank, the gauge indicates " write "that the tank contains " if tap has CLOSED write "0" endall if tap hasnt CLOSED write TANK_PRESSURE endall write " bar of air and that you are at a depth of " CURRENT_DEPTH if CURRENT_DEPTH = 1 write " metre.^" return endall write " metres.^" } {hint write "The submersible pressure gauge tells you your current depth in " write "metres and how much air remains in the tank in bar. It is " write "important to be aware of both the whole time you are underwater.^" set time = false } object bulb: incandescent light bulb has OUT_OF_REACH short an "incandescent bulb" {examine write "A few moments of staring at the bulb leaves you with an annoying " write "afterimage.^" } object cage: metal cage has OUT_OF_REACH short a "metal cage" location lab : lab laboratory short the "laboratory" has KNOWN north pool out pool {movement if destination = nowhere write "The only exit from here is back out to the north.^" else return false } {look if here has VISITED write "You have returned to the laboratory.^" return endif write "This laboratory is where you do the majority of your work here on " write "the island. A long bench through the centre of the room stands covered " write "with a variety of equipment including a large biological microscope and " write "a device for creating freeze fracture slides from bacterial samples. " write "A tall glass-doored refrigerator stands against the far wall.^" execute "+spaced_contentsPOUR THE YELLOW FLUID ON THE BROWN AGAR^" write " >FILL THE SYRINGE WITH THE CLEAR FLUID^" write " >INJECT THE CLEAR FLUID INTO THE BROWN AGAR^" write " >OPEN THE COMPARTMENT^" write " >INSERT THE FIRST PETRI DISH IN THE COMPARTMENT^" write " >CLOSE THE COMPARTMENT^" write " >PRESS THE BUTTON^" write "Insert the slide that is produced into the slot then:^" write " >LOOK THROUGH THE MICROSCOPE^" set time = false } object lab_equipment: equipment short the "equipment" {examine proxy "examine bench" } object bench: long bench table has SURFACE short a "long bench" quantity 50 {look_under write "Beneath the work bench there is about fifteen cubic metres of air.^" } {examine write "The long bench is cluttered, yet oddly organised. " execute "+contentsOPEN THE TAP^" write " >WEAR THE TANK^" write " >WEAR THE MASK^" write " >WEAR THE FINS^" set time = false } object s_water: surrounding sea water has LIQUID short the "surrounding sea water" {taste write "Salty, as you would expect.^" } {drink_override write "Given the fact that the water surrounding the island is almost " write "certainly contaminated, that probably isn't such a good idea.^" set time = false } object q_s_water: quantity of sea water has LIQUID short a "quantity of sea water" parent nowhere mass 2 {taste write "Salty, as you would expect.^" } {drink_override write "Given the fact that the water surrounding the island is almost " write "certainly contaminated, that probably isn't such a good idea.^" set time = false } {pour_on_contents write "The dark brown stain doesn't appear to be water soluble.^" } {pour_on_label : pour_on_drum write "If you are trying to soak the label off, don't bother, you really " write "don't need it.^" } location lagoon_bottom : lagoon bottom short the "lagoon bottom" has UNDER_WATER WITHOUT_AIR OUTDOORS KNOWN up lagoon_surface north mid_water south beneath_outpost {movement if compass = east if compass = west write "The base of the east head prevents your progress.^" return endall if compass = down write "You are already on the bottom of the lagoon.^" return endif return false } {look if here has VISITED write "Once again, you are floating beneath the surface of the lagoon.^" return endif if mask hasnt WORN write "The shadowy image of the ground seems darker here, gently rising " write "to the south. To the north the ground appears to drop off, " write "eventually disappearing from sight all together.^" return endall write "The floor of the lagoon is rockier here, gently rising to the south. " write "To the north a sharp drop-off marks the threshold to the deeper seas " write "of the open ocean.^" } location lagoon_surface : lagoon surface short the "lagoon surface" has ON_WATER OUTDOORS KNOWN down lagoon_bottom north ocean_surface west beach southwest beach {eachturn move lagoon_obj to here move outpost_obj to here ensure outpost_obj hasnt OUT_OF_REACH } {movement if compass = south write "There is no way to enter the outpost from here.^" return endif if compass = up write "Kicking as hard as you can, you can't manage to muster the " write "strength required to achieve escape velocity and leave the water.^" return endif return false } {look if here has VISITED write "You are back, floating on the surface of the lagoon.^" return endif write "The red tropical sun warms your face pleasingly as you float on the " write "surface of the lagoon. A small sandy beach stretches southward of the " write "west head while the research outpost can be seen floating to the " write "south.^" } location ocean_surface : ocean surface short the "ocean surface" has ON_WATER CUSTOM5 OUTDOORS KNOWN down mid_water north ocean_surface south ocean_surface east ocean_surface west ocean_surface northeast ocean_surface northwest ocean_surface southeast ocean_surface southwest ocean_surface {movement if compass = in : compass = out write "You can't go that way.^" return endif if compass = up write "Kicking as hard as you can, you can't manage to muster the " write "strength required to achieve escape velocity and leave the water.^" return endif if compass = south : compass = southeast : compass = southwest if destination = nowhere write "The rock wall is quite impenetrable.^" return endif endif if destination = nowhere write "Straying that far from the lagoon is not advisable.^" return endif return false } {look write "You are floating on the surface of the ocean. " if LATITUDE < 30 write "There is nothing but water from horizon to horizon in every " write "direction.^" return endall if LATITUDE < 35 write "The island can be made out some distance to the south.^" return endall if LATITUDE < 40 write "The island can be made out not far to the south.^" return endall if LONGITUDE = 36 write "To the south, in between the heads, you can enter the lagoon.^" return endall write "The tall rocky cliffs of the north side of the island block your " write "way to the south.^" } {first_hint write "Unless you know exactly where you are going, you are unlikely to " write "find anything of interest.^" set time = false } {second_hint write "Once you know where you are going, you will need to use the GPS unit " write "to navigate your way there.^" set time = false } {third_hint execute "+navigation" set time = false } location ocean_bottom : ocean bottom short the "ocean bottom" has UNDER_WATER WITHOUT_AIR CUSTOM5 OUTDOORS KNOWN up mid_water north ocean_bottom south ocean_bottom east ocean_bottom west ocean_bottom northeast ocean_bottom northwest ocean_bottom southeast ocean_bottom southwest ocean_bottom {movement if compass = in : compass = out write "You can't go that way.^" return endif if compass = down write "You are already on the bottom.^" return endif if compass = south : compass = southeast : compass = southwest if destination = nowhere write "The rock wall is quite impenetrable.^" return endif endif if destination = nowhere write "Straying that far from the lagoon is not advisable.^" return endif return false } {look write "Hovering just above the ocean floor, you can see no sign of the " write "surface above you. The fine silt and sand is marked only occasionally " write "by an indiscriminate rock or scattered debris. " if LATITUDE = 40 write "An almost shear wall of rock bars your progress south.^" return endall write "There is nothing but water to the limit of visibility in every " write "direction.^" } {look_up write "Filtered through the mass of water above your head, the sunlight " write "here is noticeably subdued.^" } {first_hint write "Unless you know exactly where you are going, you are unlikely to find " write "anything of interest. It may also be helpful to note that the deeper " write "you are when you go scuba diving, the more quickly you use your air.^" set time = false } {second_hint write "Once you know where you are going you will need to use the GPS to " write "navigate your way there.^" set time = false } {third_hint execute "+navigation" set time = false } object debris: rock debris short the "debris" location mid_water : mid water short name "mid water" has UNDER_WATER WITHOUT_AIR CUSTOM5 MID_WATER OUTDOORS KNOWN north mid_water south lagoon_bottom east mid_water west mid_water northeast mid_water northwest mid_water southeast mid_water southwest mid_water down mid_water {movement if compass = out : compass = in write "You can't go that way.^" return endif if compass = south : compass = southeast : compass = southwest if destination = nowhere write "The rock wall is quite impenetrable.^" return endif endif if destination = nowhere write "Straying that far from the lagoon is not advisable.^" else return false } {look if tank has WORN write "With your buoyancy finely adjusted, you float effortlessly in mid " write "water. " else write "Gently waving your arms to stay as still as possible, you are " write "floating beneath the surface of the ocean. " endif if mask has WORN write "A wide variety of marine life darts this way and that providing " write "you with a show of unparalleled beauty. " else write "A multitude of different sized shapes swirl around you, blurred " write "by the salty sea water in your eyes. " endif if CURRENT_DEPTH = 5 write "Sunlight dances brightly on the choppy surface of the water several " write "metres above your head. " endall if CURRENT_DEPTH = 10 write "Sunlight filters down from above giving the water an eerie blue " write "glow. " endif if CURRENT_DEPTH = 15 write "Filtered through the mass of water above your head, the sunlight " write "here is noticeably subdued. " endif if CURRENT_DEPTH = 20 write "Looking down, you can now begin to make out the sandy form of the " write "ocean floor. " endall if LATITUDE = 40 if LONGITUDE = 36 if CURRENT_DEPTH = 5 write "To the south you can see the edge of a shelf running in " write "between the two heads of the lagoon.^" return endall if LATITUDE = 40 write "An almost shear wall of rock bars your progress south.^" return endall if CURRENT_DEPTH = 20 : CURRENT_DEPTH = 5 write ^ return endif write "There is nothing but water to the limit of visibility in every " write "direction.^" } {look_up if CURRENT_DEPTH = 5 write "Sunlight dances brightly on the choppy surface of the water " write "several metres above your head.^" return endif if CURRENT_DEPTH < 20 write "Sunlight filters down from above giving the water an eerie blue " write "glow.^" return endif write "Filtered through the mass of water above your head, the sunlight " write "here is noticeably subdued.^" } {look_down if LONGITUDE = 15 if LATITUDE = 21 if CURRENT_DEPTH = 20 write "You can see tall rock formation on the ocean floor.^" return endall if CURRENT_DEPTH = 20 write "Looking down, you can now begin to make out the sandy form of the " write "ocean floor.^" return endif write "You see nothing other than deep blue water.^" } {first_hint write "Unless you know exactly where you are going, you are unlikely to find " write "anything of interest. It may also be helpful to note that the deeper " write "you are when you go scuba diving, the more quickly you use your air.^" set time = false } {second_hint write "Once you know where you are going, you will need to use the GPS to " write "navigate your way there.^" set time = false } {third_hint execute "+navigation" set time = false } object sea_life: sea marine life fish short the "marine life" {examine write "The marine life, mostly various species of fish, never fails to " write "amaze you with its wondrous variety of colours and shapes.^" } {take write "They dart elusively out of the way as you grab.^" } {attack write "They dart elusively out of the way.^" } object wall: rock wall cliff cliffs short a "rock wall" {examine write "Many nooks and crannies make the rock wall a haven for all types of " write "marine life.^" } {climb if here = ocean_surface write "You would be torn to shreds by the waves if you attempted to " write "climb the wall out of the water.^" set time = false return endif proxy "up" } location site : rock formation short the "rock formation" has UNDER_WATER WITHOUT_AIR CUSTOM5 OUTDOORS up mid_water north ocean_bottom south ocean_bottom east ocean_bottom west ocean_bottom northeast ocean_bottom northwest ocean_bottom southeast ocean_bottom southwest ocean_bottom {movement if compass = down write "You are already on the bottom.^" return endif if compass = in write "A suicide mission you decide not to accept, Jim.^" return endif return false } {look if here has VISITED write "You have arrived back at the rock formation.^" return endif write "A large rock formation breaks up the monotony of the ocean floor " write "here. Water stretches out in every direction as far as the eye " write "can see.^" } {eachturn if WORK_PHASE = 4 write "^The submarine's propellers, previously turning slowly to " write "counter the mild current, now spring to life. Its powerful " write "spotlight sweeps past as it turns, forcing you to duck down " write "further behind the rock formation in order to avoid being seen. " write "Now facing roughly to the southeast, the submarine begins to move " write "off, gently rising and increasing in speed as it goes.^" move submarine to limbo set WORK_PHASE + 1 if mask has WORN write "^As the silt stirred up by the submarine's propellers " write "begins to clear, a soft glint catches your eye. It would " write "appear that one of the spilled vials, having up until now been " write "covered by a layer of soft sand, has been inadvertently " write "left behind.^" move vial to here endif endif if WORK_PHASE = 3 write "^With the canisters now firmly in place, one of the divers " write "closes the hatch to the submarine. Glancing around briefly, " write "he turns then follows the other divers up through an opening in " write "the submarine's base.^" move divers to limbo move canister to limbo move vial to limbo ensure vial hasnt OUT_OF_REACH set WORK_PHASE + 1 endif if WORK_PHASE = 2 write "^Sudden commotion near the submarine draws your attention " write "back to it. It appears that one of the canisters has somehow " write "come open while being loaded, spilling several small glass vials " write "on to the ocean floor. Divers quickly scramble to recover them, " write "then continue to finish loading the canister from which they " write "came.^" set WORK_PHASE + 1 move vial to here endif if WORK_PHASE = 1 write "^As each canister is lined up with an opening in the aft " write "end of the submarine, the divers slowly begin to slide it along " write "a set of rollers until it disappears into the submarine's " write "interior.^" set WORK_PHASE + 1 endif if WORK_PHASE = 0 write "^Put on guard by the soft humming noise of an electric " write "motor, you squat down behind the rock formation. Peering out and " write "around, you see a group of four divers working to load several " write "long steel canisters, neatly stacked on the ocean floor, into an " write "unmarked submarine hovering nearby. The divers appear to be unaware " write "of your presence.^" move submarine to here set WORK_PHASE + 1 } {look_up write "Filtered through the mass of water above your head, the sunlight " write "here is noticeably subdued.^" } {wave if WORK_PHASE > 0 if WORK_PHASE < 5 write "Waving your arms wildly, " execute "+attention" endall return false } {first_hint write "Just wait and keep out of sight.^" set time = false } {second_hint write "When the divers eventually go, they will accidentally leave something " write "behind. You will only be able to see this, however, if you are " write "wearing the scuba mask.^" set time = false } {third_hint write "Once the divers have gone (providing you are wearing the mask), " write "simply TAKE THE VIAL.^" set time = false } {examine write "Standing upright on the ocean floor, the rock formation looks very " write "much like something, you just aren't quite sure what. Its multitude " write "of crags and protrusions spark your imagination, its likeness shifting " write "in your mind from that of a kneeling man to a gnarled coastal tree, " write "then back to a plain old rock.^" } {look_behind if WORK_PHASE = 0 write "Just more water.^" return endif return false } object submarine: small submarine sub has OUT_OF_REACH short a "small submarine" long "A small submarine hovers just off the ocean floor beyond the rock formation.^" mass heavy parent nowhere {hint write "There is nothing you can do with the submarine, just wait quietly " write "for it to leave.^" set time = false } {examine write "The sleek black submarine is about six metres long. Its many propellers " write "whirr constantly as its pilot attempts to keep it hovering still in " write "the capricious currents. A powerful spotlight shines down from its " write "underside, brightly illuminating the area where the divers are " write "working. The cargo hold into which they are attempting to load the " write "canisters is accessed via an opening in its aft end, while passengers " write "enter and exit through a rectangular opening along its underside. " write "The only other notable feature of the submarine is that it is " write "completely devoid of any identifying markings.^" } {enter proxy "in" } {take write "The submarine is not THAT small!^" set time = false } object rec_opening: rectangular opening short a "rectangular opening" {examine write "The rectangular opening is where the divers enter and exit the " write "submarine.^" } {enter proxy "in" } object aft_opening: aft opening short the "aft opening" {examine write "The divers are loading the canisters into the submarine's interior " write "through the aft opening.^" } {enter proxy "in" } object canister: mysterious canister canisters has OUT_OF_REACH short a "mysterious canister" {examine write "The canisters are cylindrical in shape and completely smooth except for " write "a small clip at one end. Their brushed steel exteriors shine brightly " write "indicating the brevity of their visit to the ocean floor.^" } {open : take write "There is no way for you to get close enough to the canister without " write "being seen by the divers (which is probably not something that you " write "want to have happen considering the fact that they all have spear " write "guns).^" } object vial: small glass vial vials has OUT_OF_REACH long "There is a small glass vial here.^" short a "small glass vial" mass 4 quantity 2 parent nowhere {take if divers(parent) = here write "There is no way you could get the small glass vial without being " write "seen by the divers.^" set time = false return endif return false } {take_override write "You take the small glass vial.^" ensure noun1 has TOUCHED move vial to player if vial hasnt SCORED points 10 ensure vial has SCORED endif } {show_to_lisa proxy "ask lisa about vial" } {show_to_wise write "~Give me a closer look at it,~ Wise says holding out his hand.^" } {give_to_wise write "~I think I'll hang on to this for now,~ Wise informs you as be " write "places the vial into his top pocket.^" move vial to wise } {examine if vial(parent) != player write "The small glass vial is both small and made from glass.^" return endif write "The small glass vial has a metal rim at one end. A " write "rubber membrane is stretched inside this metal rim in a fashion " write "similar to the containers used to store pharmaceutical substances for " write "injection. " if fuel(parent) = vial write "Inside the vial you can see a clear liquid.^" else write "The vial is now empty.^" endif } {shake if fuel(parent) = vial write "The clear liquid sloshes around inside the vial.^" return endif write "This achieves little.^" } {open write "The vial has been designed in such a way that it never needs to be " write "opened, thus remaining free from contaminants. Its contents would " write "typically be extracted through the membrane with the use of a syringe.^" } {return write "It is neither necessary nor desirable to break open the vial.^" } {show_to_stranger if vial has CUSTOM5 write "The stranger just ignores you.^" return endif write "~I have monitored the transport of many vials such as the one you " write "have discovered. I can not tell you much about them, as their exact " write "source is still unknown. This is mainly due to the " write "extraordinary lengths that the couriers have gone to in order to " write "conceal their transport route.~^" } {show_to_zuckerman if vial has CUSTOM3 write "That would be a waste of time.^" set time = false return endif write "~Oh, you have one too...~ Dr Zuckerman says with a smile.^" set TOPICS_DISCUSSED + 1 } {inject_with_syringe proxy "fill syringe using vial" } object membrane: rubber membrane short a "rubber membrane" parent vial {examine write "The rubber membrane is stretched out inside a metal rim at one end " write "of the vial allowing its contents to be extracted with the use of a " write "syringe.^" } {return write "It is neither necessary nor desirable to break the rubber membrane.^" } attribute FUEL_ADDED object fuel: small quantity of perfectly clear liquid has LIQUID OUT_OF_REACH short a "small quantity of clear liquid" mass 2 parent vial {examine write "The liquid is perfectly clear." if fuel(parent) = syringe if fuel has BUBBLES write " It appears to be filled with many small bubbles." endif endif write ^ } {inject_in_player_override write "You roll up your sleeve and inject the pale yellow liquid into a " write "vein in your arm. Withdrawing the needle, then applying a firm " write "pressure on the puncture, you begin to feel slightly dizzy. " write "You arch over, standing with you hands on your knees, fighting " write "the increasing feeling of nausea. Closing your eyes, you attempt " write "to regain control of your heart rate" endall if syringe hasnt CUSTOM4 if syringe hasnt CUSTOM5 write ", actively calming yourself until you begin to feel more " write "composed. Relieved, you stand up straight again, wipe an " write "abundance of sweat from your brow then take several deep " write "breaths, reassuring yourself that you are indeed still alive.^" move fuel to limbo set AGING_SCRIPT = true return endall write " only to find your dizziness increase and stabbing pains cause your " write "body to convulse. Dropping to your knees you begin to have trouble " write "breathing and soon lose consciousness...^" execute "+game_over" } {taste write "The clear liquid tastes indescribably foul.^" } {drink_override write "The clear liquid tastes indescribably foul.^" move fuel to limbo set AGING_SCRIPT = true } {sniff write "The clear liquid smells sort of musty or stale.^" } {inject_in_vial_override write "You puncture the rubber membrane with the tip of the needle and " write "inject the clear liquid back into the vial.^" move fuel to noun2 ensure fuel has OUT_OF_REACH } {inject_in_dish_1_override proxy "inject clear fluid in brown agar" } {inject_in_agar_1_override write "You inject the clear liquid into the brown agar.^" move fuel to limbo ensure dish_1 has FUEL_ADDED } {inject_in_dish_2_override proxy "inject clear fluid in beige agar" } {inject_in_agar_2_override write "You inject the clear liquid into the beige agar.^" move fuel to limbo ensure dish_2 has FUEL_ADDED } {inject_in_lisa_override write "If you aren't willing to inject the clear liquid into yourself, then " write "you obviously don't want to known what will happen badly enough.^" set time = false } {pour_on_dish_2_override proxy "pour clear liquid on beige agar" } {pour_on_dish_1_override proxy "pour clear liquid on brown agar" } {pour_on_agar_2_override write "You pour the clear liquid onto the beige agar.^" ensure dish_2 has FUEL_ADDED move fuel to limbo } {pour_on_agar_1_override write "You pour the clear liquid onto the brown agar.^" ensure dish_1 has FUEL_ADDED move fuel to limbo } object divers: divers has OUT_OF_REACH PLURAL ANIMATE short the "divers" {wave_at : greet execute "wave_site" } {yell_at write "Yelling, as well as you can underwater, " execute "+attention" } {examine write "Working quickly and efficiently, the divers' tightly coordinated " write "efforts make obvious their high level of training.^" } {attack write "I should probably mention at this point that each of the divers is " write "armed with a spear gun, so attacking them is a sure-fire way to end " write "up dead.^" } location walkway : floating walkway short the "floating walkway" has OUTDOORS KNOWN east nowhere west beach {eachturn move lagoon_obj to here move outpost_obj to here ensure outpost_obj hasnt OUT_OF_REACH } {movement if compass = east if destination = nowhere proxy "open door" write "^" set destination = storage return false endif endif if compass = east if destination = false write "You bang your head on the closed steel door.^" return endall if destination = false write "The walkway runs east-west.^" else return false } {look if here has VISITED write "You are standing on the walkway.^" return endif write "Keeping a wide stance to help stabilise yourself, you are standing " write "on a floating walkway that leads from the research outpost in the " write "east, to the shore of the lagoon in the west. " if steel_door has CLOSED write "The door leading into the outpost is closed.^" return endall write "The door leading into the outpost is open.^" } {jump write "It's hard enough to keep your balance without jumping up and down.^" } {examine write "The floating walkway leads from the west shore of the lagoon to the " write "research outpost.^" } object outpost_obj: floating research outpost short a "research outpost" {examine if here = beach write "The research outpost is floating near the centre of the lagoon. A " write "long walkway connects to the beach where you are standing.^" return endif write "The research outpost is floating near the centre of the lagoon. A " write "long walkway connects it to a beach on the west shore.^" } {enter proxy "e" } object lagoon_obj: calm lagoon shore short a "lagoon" {enter proxy "ne" } {examine write "The lagoon is moderately calm and sheltered.^" } location beach : lagoon beach short the "lagoon beach" has OUTDOORS KNOWN east walkway northeast lagoon_surface south trail {eachturn move lagoon_obj to here move outpost_obj to here ensure outpost_obj has OUT_OF_REACH } {movement if compass = north write "The west head of the lagoon bars your progress.^" return endif if compass = west write "The bank is too steep and the palms too dense.^" return endif if destination = nowhere write "You can either walk south along the trail or east on to the walkway.^" else return false } {look if here has VISITED write "You have returned to the beach on the west shore of the lagoon.^" return endif write "You are standing on a beach that lines the west shore of the lagoon. " write "Further to the west, the afternoon sun filters through a wall of tall " write "palms that lines the bank of a steeply rising hill. To the south the " write "beach narrows, eventually becoming nothing more than a meandering " write "trail that gradually disappears into the jungle. A long walkway leads " write "east from here, out across the calm waters of the lagoon to where the " write "research outpost floats.^" } {listen write "You hear the soothing sound of the lagoon waters washing up on to " write "the beach.^" } object hill_obj: steeply rising hill short a "steeply rising hill" {climb : enter write "The hill is far too steep for you to climb.^" } object palms: palm palms tree trees has PLURAL short the "palms" {examine write "The afternoon sun filters through the wall of tall palms.^" } {climb write "And look for coconuts no doubt.^" set time = false } location trail : trail short the "trail" has OUTDOORS KNOWN north beach south estuary {eachturn set JUNGLE_SCRIPT + 1 if JUNGLE_SCRIPT = 15 write "^A butterfly flutters past on the gentle breeze, disappearing " write "again between the trees.^" set JUNGLE_SCRIPT = 0 endif } {movement if compass = north write "You follow the trail for several minutes over a gentle rise, " write "finally arriving at the shore of the lagoon.^^" return false endif if compass = south write "The trail winds its way through the jungle for several minutes " write "before opening out at an estuary.^^" return false endif write "Strange noises and rustlings convince you to stick to the trail.^" } {look if here has VISITED write "You are back on the narrow trail.^" return endif write "You are on a narrow trail that winds its way north-south through the " write "jungle. Weird and wonderful noises fill the air, some you recognise, " write "some you don't.^" } {listen write "Strange noises emanate from the surrounding jungle. None that entice " write "you to investigate, however.^" } {smell write "The sweet smell of tropical flowers hangs in the air.^" } object butteryfly: butterfly parent nowhere location estuary : estuary short the "estuary" has OUTDOORS KNOWN north trail east compound northwest hill up hill south south_beach {look if here has VISITED write "You have arrived back at the estuary.^" return endif write "The jungle thins and the trail fades as they approach the " write "south shore of the island. Sparkling water flows down a sandy " write "estuary from the northwest, bending to the south as it " write "traverses the gentle slope towards the ocean. To the east lies the " write "compound of the main military base.^" } object estuary_obj: sandy estuary short a "sandy estuary" {examine write "Sparkling water flows down the sandy estuary from the northwest, " write "bending to the south as it traverses the gentle slope towards the " write "ocean.^" } location behind_hangar : behind hangar short name "behind the hangar" has OUTDOORS KNOWN southwest south_beach up on_crate {look if here has VISITED write "You are behind the hangar again.^" return endif write "Scattered coastal bushes provide minimal cover from sight here " write "behind the hangar. Up against the back wall of the hangar there is a " write "rectangular crate.^" } {eachturn move bushes to here } {first_hint write "Examine the crate then climb on to it.^" set time = false } {second_hint write "If the crate was up-ended, it would divide the height of the hangar " write "into two manageable steps.^" set time = false } {third_hint write "Just type:^" write " >TIP CRATE OVER^" write " >UP^" write " >UP^" set time = false } {jump proxy "up" } object rect_crate: rectangular crate has SURFACE short a "rectangular crate" {open write "There is no obvious way to open the crate.^" } {move write "You push the crate a short distance along the ground.^" } {turn : tip_up if rect_crate has CUSTOM4 write "You lean your weight against the crate and tip it back on to its " write "side" ensure rect_crate hasnt CUSTOM4 set on_crate(up) = nowhere set roof_south(down) = nowhere execute "+contents_tumble" return endif write "Squeezing your fingers under the end of the crate, you manage to " write "tip it up on to its end" execute "+contents_tumble" ensure rect_crate has CUSTOM4 if rect_crate hasnt SCORED points 5 ensure rect_crate has SCORED endif set on_crate(up) = roof_south set roof_south(down) = on_crate } {+contents_tumble set INDEX = 0 loop if noun3(parent) = on_crate if noun3(mass) < heavy if noun3 hasnt LOCATION set INDEX + 1 endall endloop if INDEX = 0 write .^ return endall write " causing " loop if noun3(parent) = on_crate if noun3(mass) < heavy write noun3{the} move noun3 to here set INDEX - 1 execute "+list_structure" endall endloop write " to tumble on to the ground.^" } {examine if rect_crate hasnt CUSTOM4 write "The crate is resting up against the back wall of the hangar and " write "is about six feet wide and three feet tall.^" return endif write "The crate is resting up against the back wall of the hangar and is " write "about three feet wide and six feet tall.^" } {climb : jump_on : enter proxy "up" } {look_behind write "Although very close to the back wall of the hangar, there is just " write "enough room to see in behind the crate. Shielding your eyes until they " write "adjust to the dark, you come to see that there is nothing there but " write "bare wall.^" } object hangar_obj1: hangar large building short a "hangar" {enter write "The entrance to the hangar is around the front at the north end.^" } location on_crate : on crate short name "on the crate" has OUTDOORS down behind_hangar up nowhere {movement if compass = up if destination = false write "You are unable to climb up on the roof of the hangar as the " write "edge of the gutter is still another ten feet above the top " write "of the crate.^" return endall if compass = up write "You jump up and hook your fingers over the edge of the guttering " write "then pull yourself on to the roof.^^" return false endif return false } {look if here has VISITED write "You are standing on the crate.^" return endif write "You are standing on top of the rectangular crate with the ground " if rect_crate hasnt CUSTOM4 write "three feet below. The back wall of the hangar looms beside you " write "another ten feet beyond the top of the crate.^" endif if rect_crate has CUSTOM4 write "six feet below. The back wall of the hangar stretches up another " write "seven feet taller than the top of the crate.^" endif } {jump proxy "up" } object hangar_obj3: large hangar building short a "large hangar" {climb proxy "up" } {examine if rect_crate hasnt CUSTOM4 write "The hangar looms tall above you, its roof still another four or " write "five feet above your head.^" return endif write "The hangar wall stretches up beside you another seven feet above the " write "top of the crate.^" } object rect_crate_2: rectangular crate crate short a "rectangular crate" {climb proxy "down" } {tip_up : turn write "You can't tip the crate up while you are standing on it.^" set time = false } location roof_north : roof end of north short name "north end of roof" has OUTDOORS south roof_south down hangar_north {movement if compass = down if destination = nowhere write "Without the rope tied to the ventilation pipe, the drop down " write "to the floor is too far.^" return endif endif if compass = down write "Cautiously, you lower yourself down the rope.^" return false endif return false } {look if here has VISITED write "You are crouching down at the north end of the hangar's roof.^" return endif write "You are near the north end of the hangar's roof, crouching down " write "below the ridge line in order not to be seen. A square section of " write "sheeting has been removed beside a ventilation pipe creating an " write "opening large enough for you to pass through into the hangar's " write "interior." if rope(parent) = vent write " A length of rope has one end tied to the ventilation pipe with " write "the other dangling down through the opening." endif write ^ } {look_down proxy "look through opening" } {listen if lisa has BURNING write "Listening as carefully as you can, you are unable to make out " write "what the people below are saying.^" return endif write "You can hear what sounds like intermittent foot steps coming from " write "within the hangar.^" } {jump : stand write "Are you mad? You would be spotted a mile away if you did that.^" } object vent: vent ventilation pipe short a "ventilation pipe" {examine write "The ventilation pipe protrudes about half a metre from the roof of " write "the hangar and is capped with a galvanised cone to prevent rain from " write "entering.^" if rope(parent) = vent write " A length of rope has one end tied around the ventilation pipe and " write "the other dangling down through the opening.^" endif } object rope: length of rope has CUSTOM5 short a "length of rope" long "There is a length of rope here.^" mass scenery; When untied, set mass to 10, allowing it to be taken. parent vent {examine write "The length of rope is quite thick and sturdy and about ten metres long.^" if rope(parent) = vent write " One end of the rope is tied around the ventilation pipe with the " write "other dangling down through the opening.^" endif } {pull if rope(parent) = vent proxy "untie rope" return endif return false } {tie_to_vent set rope(mass) = scenery move rope to vent move rope_end to hangar_north set roof_north(down) = hangar_north write "You tie the rope to the ventilation pipe allowing the other end to " write "dangle down through the opening.^" } {untie set rope(mass) = 10 move rope to here move rope_end to limbo set roof_north(down) = nowhere write "You untie the rope from the ventilation pipe and pull the other end " write "up onto the roof.^" } {climb if rope(parent) = vent proxy "go down" return endif write "The rope leads nowhere.^" set time to false } {climb_up if rope(parent) = vent write "You are already at the top of the rope.^" return endif write "The rope leads nowhere.^" set time to false } {climb_down if rope(parent) = vent proxy "go down" return endif write "The rope leads nowhere.^" set time to false } object roof_opening: roof opening short an "roof opening" {look_through if lisa has BURNING write "Through the opening you can see the stranger, Lisa and several " write "officials all in quiet conversation.^" return endif write "You can see the floor of the hangar over fifteen feet below.^" } {enter proxy "d" } location roof_south : roof south short name "south end of roof" has OUTDOORS north roof_north down on_crate {look if here has VISITED write "You are crouching down at the south end of the hangar's roof.^" return endif write "You are near the south end of the hangar's roof, crouching down " write "below the ridge line in order not to be seen.^" } {jump : stand write "Are you mad? You would be spotted a mile away if you did that.^" } object hangar_obj: hangar large short a "hangar" parent nowhere location hangar_north : north end of hanger short name "north end of hanger" south hangar_south up roof_north {eachturn move hangar_door to hangar_north ensure hangar_door hasnt OUT_OF_REACH move access_door to hangar_north ensure access_door hasnt OUT_OF_REACH if stranger has ENCOUNTERED if stranger(parent) = here if rope hasnt CUSTOM5 write "^The stranger, obviously startled by another intrusion, " write "relaxes noticeably on seeing that it is just you again.^" ensure rope has CUSTOM5 endif if stranger hasnt TRUSTING if random = 4 write "^The stranger looks mistrustfully at you out of the " write "corner of his eye.^" endif endif endif else execute "+stranger_encounter" execute "+stranger_standoff" ensure filing has CUSTOM5 endif } {movement if compass = north write "The front door is closed.^" return endif return false } {look if here has VISITED write "You are back at the north end of the hangar.^" return endif write "This enormous space is sparsely furnished with a small writing desk " write "and filing cabinet. The main door to the hangar stands to the north, " write "beside which there is a smaller access door for people to come and go. " write "What appears to be a large fish tank occupies the majority of " write "the space to the south. Light streams in from above through a square " write "opening in the roof." if rope(parent) = vent write " A length of rope dangles down through the opening.^" endif } {look_up execute "examine_inside_opening" } {listen write "The loudest sound you can hear is that of your heart beating.^" } {first_hint write "You must either take Lisa's gun or take the stranger's gun.^" write "WARNING: The next clue will say whose gun to take.^" set time = false } {second_hint write "Once you have resolved the stand-off by taking Lisa's gun, you will " write "need to get the contents of the bottom drawer of the cabinet (which " write "is locked, permanently).^" set time = false } {third_hint write "Just REMOVE THE TOP DRAWER and you will be able to TAKE THE DIARY " write "out of the bottom one.^" set time = false } object tank_view: apparent fish tank short a "fish tank" {shoot_override : shoot_with_gun : attack_with_gun write "You quickly take aim then pull the trigger.^" write "~Alex!~ Lisa cries as the access door bursts open and the MP runs " write "into the room.^" write "Seeing you with the gun in your hand, the MP shoots. A burning pain " write "cuts through your chest as you hit the ground, your mind spinning " write "from the shock. Before long, the cold fluid from the now shattered " write "fish tank spreads across the floor of the hangar to wet your clothes " write "and hair.^" execute "+game_over" } {examine : look_in write "The fish tank, still some distance to the south, is standing on a " write "metal frame.^" } object inside_opening: roof opening has OUT_OF_REACH short a "inside of the roof opening" {look_through : examine write "Through the opening you can see nothing but blue sky.^" } {enter proxy "u" } attribute TRUSTING ENCOUNTERED object stranger: stranger tall middle-aged man has ANIMATE short the "stranger" long function parent nowhere mass heavy {long if stranger(status) = 0 write "The stranger is here pointing his pistol at Lisa.^" return endif if stranger(status) = 1 write "The stranger is here, searching about the room.^" return endif if stranger(status) = 2 write "The stranger is here, standing with his hands above his head.^" return endif if stranger(status) = 3 write "The stranger is here examining the tank and bank of instruments.^" return endif if stranger(status) = 4 write "The stranger is here, searching about the room.^" return endif } {ask_about_fish_tank : ask_about_tank_view if here = hangar_south write "The stranger places the palm of his hand against the glass wall " write "of the tank. " else write "The stranger looks at you, his face slightly contorted. " endif write "~Well, it's probably another one of Dr Zuckerman's tests. " write "Your guess is as good as mine as to the nature of it, though.~^" } {ask_about_instruments write "~Beats the shit out of me!~ the stranger says with a shrug.^" } {ask_about_rect_crate write "~The crate has always been there,~ the stranger explains. ~I just " write "tipped it up so that I could use it to get on to the roof. Once " write "hanging from the gutter, I decided it would be best to kick it back " write "over to avoid anyone noticing and thinking it suspicious.~^" } {examine if lisa has CUSTOM2 write "The stranger is standing firm with his pistol pointed directly " write "at Lisa's head.^" return endif write "The stranger is a tall, middle-aged man with short dark hair. He is " write "dressed almost completely in black.^" } {ask_about_compressor write "~I presume it is for oxygenating the water, just like a domestic " write "fish tank.~^" } {ask_about_submarine write "~It's hard to say who it would have belonged to,~ the stranger " write "begins in reply. ~There are so many people, knowingly or unknowingly, " write "working on Dr Zuckerman's project. It is almost impossible to keep " write "track of them all.~^" } {ask_about_divers : tell_about_divers write "~It's hard to say who they were,~ the stranger says with a frown. " write "~There are so many people, knowingly or unknowingly, working on Dr " write "Zuckerman's project. It is almost impossible to keep track of them " write "all.~^" } {shoot_override : shoot_with_gun : attack_with_gun write "Seizing the opportunity, you take aim at the stranger and pull the " write "trigger.^" write "~Alex!~ Lisa cries as the access door bursts open and the MP runs " write "into the room. You recall thinking how you would explain, but never " write "get the chance.^" execute "+game_over" } {ask_for_gun if lisa has CUSTOM2 write "With Lisa covering you, you walk up to the stranger and hold out " write "your hand.^" write "~You're making a big mistake,~ he says as he hands over his pistol.^" write "~Good work, Alex,~ Lisa says, noticeably relieved. ~Now give me the " write "gun and get out of here before I call the guard in. Something tells " write "me you don't want have to explain to him what you are doing in " write "here.~^" ensure lisa hasnt CUSTOM2 ensure lisa has ON ensure lisa has POSSESSIVE set stranger(status) = 2 set lisa(status) = 2 move gun to kryten return endif write "The stranger doesn't even honour your request with a reply.^" } {ask_about_lisa write "~Don't worry, she'll be fine. By the time they find her, both you and " write "I will be far away from here. Then, by the time they catch up with us, " write "we'll have enough evidence to close this whole operation down.~^" } {tell_about_vial execute "show_to_stranger_vial" } {ask_about_vial write "~I have monitored the transport of many vials such as the ones you " write "describe. I can not tell you much about them, as their exact source is " write "still as yet unknown. This is mainly due to the extraordinary lengths " write "that the couriers have gone to in order to conceal their transport " write "route.~^" } {tell_about_green_slide if fuel has SCORED execute "tell_about_fuel_stranger" return endif if green_slide(parent) = limbo write "What green slide?^" return endif write "Perhaps if you took a look at it through the microscope you would " write "have something of interest to tell him.^" } {tell_about_fuel : tell_about_ames if stranger has TRUSTING write "~Yes, I recall,~ the stranger replies.^" return endif write "You tell the stranger about your discovery of the vial and " if fuel has SCORED write "your experiments regarding the clear liquid within it.^^" write "As you do so the stranger's eyes light up. " if stranger has CUSTOM5 write "~Well, that would confirm what I was telling you about the " write "human test subjects.~^" else write "~Your tests appear to confirm our findings,~ the stranger says " write "as he rubs his chin thoughtfully. ~You see, several of Dr " write "Zuckerman's experiments involved involuntary human subjects, two " write "of which we were fortunate enough to have the opportunity to " write "interview. Although neither could remember anything of the " write "tests themselves, both showed signs of accelerated aging.~^" ensure stranger has CUSTOM1 endif points 5 ensure stranger has TRUSTING if diary has SCORED execute "+stranger_offer" endif return endall write "the clear liquid within it.^" } {ask_about_tests write "~You see, several of Dr Zuckerman's experiments involved involuntary " write "human subjects, two of which we were fortunate enough to have the " write "opportunity to interview. Although neither could remember anything " write "of the tests themselves, both showed signs of accelerated aging.~^" } {ask_about_stranger if stranger hasnt CUSTOM2 write "~Let's just say I'm a sort of public servant, a government " write "watchdog so to speak.~^" ensure stranger has CUSTOM2 return endif write "The stranger just frowns.^" } {ask_about_zuckerman if stranger has CUSTOM5 write "~There's not much more I can tell you at this stage.~^" return endif write "~Over a year ago now, our department received information regarding " write "tests being performing by Dr Zuckerman here on the island. " if stranger hasnt CUSTOM1 write "Tests involving involuntary human guinea pigs. F" else write "As I was saying earlier, f" endif write "rom what we can gather the tests appear to increase the rate at which " write "the subjects age, but for what reason we can not say. Security is " write "high around the project, so progress has been slow. The doctor is also " write "somewhat of a recluse, rarely straying out into the public eye, which " write "has made monitoring his actions almost impossible.~^" ensure stranger has CUSTOM5 } {talk_to if lisa has CUSTOM2 write "~There'll be time to talk later,~ the stranger replies tensely.^" return endif if lisa has ON write "Lisa butts in, ~Don't talk to him, Alex. Just give me the gun " write "then get out of here.~ ^ return endif if lisa has BURNING write "Lisa butts in, ~Don't talk to him, Alex. Just get out of here.~ ^ return endif write "~What would you like to know, Dr Meadows?~ ^ } {attack if lisa has CUSTOM2 write "Why don't you just take his gun instead.^" return endif if lisa has ON write "I don't think taking a cheap shot at the stranger is going to " write "help your situation at all.^" return endif if lisa has BURNING write "I don't think taking a cheap shot at the stranger is going to " write "help your situation at all.^" return endif write "Are you out of your mind!^" } object gun: strangers stranger's gun plain black pistol his mans man's short the "stranger's pistol" long "The stranger's pistol is lying here.^" parent stranger mass 5 {take_override if gun(parent) = stranger proxy "ask stranger for strangers pistol" return endif return false } {give_to_lisa write "You hand the stranger's pistol to Lisa.^" write "~Now get out of here,~ Lisa orders sternly. ~I'll talk to you when " write "we both get back to the outpost.~^" move gun to lisa ensure lisa hasnt ON ensure lisa has BURNING } {examine write "Never having been one for guns, you don't much like the look of it.^" } object rope_end: length of thick sturdy rope short a "length of rope" mass scenery {examine write "The rope dangles down from above through the square opening in the " write "roof.^" } {take : pull write "The rope appears to be quite firmly attached to something outside.^" } {climb : climb_up proxy "go up" } {climb_down write "You are already at the bottom of the rope.^" } object hangar_door: main door short the "main door" {open write "The main door to the hangar can't be opened by hand.^" } {examine write "The main door is about four metres tall and almost ten metres wide.^" } object access_door: access door has CLOSABLE CLOSED LOCKED short the "access door" {open : knock_on if here = compound proxy "s" return endif if lisa has CUSTOM2 write "You walk behind Lisa towards the access door." execute "+lisa_shoots" write "you and forces you on to the ground.^" execute "+busted" return endif if lisa has ON write "~Don't do it, Alex. You really don't want have to explain to the " write "guard what you were doing in here,~ Lisa says as you approach the " write "door.^" return endif if lisa has BURNING write "~I strongly suggest leaving by the rope,~ Lisa says before you " write "reach the door.^" return endif write "That is more than likely going to get you killed.^" } object filing: filing cabinet has SURFACE short a "filing cabinet" quantity 20 {examine write "The filing cabinet is of a simple two drawer design. Its pale brown " write "paint is badly scratched from years of apparent wear. The top drawer " if top_drawer(parent) != filing write "is missing, allowing you to see into the bottom drawer.^" return endif if top_drawer has CLOSED write "is closed, as is the bottom one.^" else write "is open while the bottom one is closed.^" } {look_in if top_drawer(parent) != filing proxy "look in bottom drawer" return endif proxy "examine filing cabinet" } {open proxy "open drawer" } object desk_leif: sturdy desk has SURFACE short a "sturdy desk" quantity 30 {examine write "The desk's stark, yet sturdy construction is reminiscent of the " write "design philosophy prevalent in communist Russia in the nineteen " write "forties. " execute "+details