Iron Guppy Game Script

This script is for The Iron Guppy. It is written in Dave's Game Script Language for Dave's Text Game Engine.


# The Space Guppy - A text-based adventure game for Dave's Game Engine
# v2.6
# Copyright 2003 David Gauer

# global vars

var room1_lightswitch_on;
var room2_lightswitch_on = 1;
var room3_lightswitch_on;
var room1_trunk_open;
var room2_trunk_open;
var seen_astrolog;
var galley_enemies_alive = 1;
var bridge_enemy_alive = 1;
var gun_state;
var lantern_state;
var topen_noguninv;
var lanternnocell;
var knowaboutcontrol;
var ship_depirated;
var hasweapon;
var haveuselessgun;
var buried;


# start->lookat() is the first object action called by
#  the game engine.  Use it to start the game.

object start
{
  object_description = "The Start of the Game";

  action lookat()
  {
    location = room1;
    @
      <div align="center"><img src="images/gameGuppyLogo.jpg"></div><br>You are aboard the space-going vessel
      <i>The Iron Guppy</i>.  You lie awake in your bunk in the darkness.  Loud noises have
      intruded on your dreams.  Something is terribly wrong.  Only a few faint sounds come
      through the thick metal door to your quarters.
    @
  }
}


object room1
{
  object_description = "Your Quarters";

  action lookat()
  {
    if(room1_lightswitch_on == 0)
    {
      @
        You are in complete darkness.  You cannot see anything in your room.  You can, however,
        feel the [room1->fliplight():lightswitch] on the wall.
      @
    }
    else
    {
      @
        Your quarters are small, but neat and tidy.  All of your worldly possesions are here.
        Your [room1_desk->lookat():desk] is on the port side of the ship.  Your
        [room1_trunk->lookat():trunk] and [bunk->lookat():bunk] are on the starboard wall
        facing the outside of the ship.  To the bow is the
        [room1->open_door():door to the aft passageway].  There is a
        [room1->fliplight():lightswitch] on the wall next to the door.
      @
    }
  }
  action open_door()
  {
    location = passageway;
    @
      You open the door and cautiously peer outside.  Seeing nothing wrong,
      you step into the passageway and close the door to your quarters quietly behind you.
    @
  }
  action fliplight()
  {
    if(room1_lightswitch_on == 1)
    {
      @
        You turn the light switch off.  The darkness fills the room once again.  The afterimage of
        the room quickly fades from your eyes.
      @
      room1_lightswitch_on = 0;
    }
    else
    {
      @
        You turn the light switch on.  You wince, but manage to keep your eyes open.  Everything
        in your room is now bathed in the warm glow of the ceiling light panel.
      @
      room1_lightswitch_on = 1;
    }
  }
}


object room1_desk
{
  action lookat()
  {
    @
      The desk is wood, one of the few items in the ship made of the bodies of trees.  It is pitted
      with age and use, but well cared-for.  There is an [infopad->lookat():infopad] on the desk and
      a long, horizonal [room1_desk->open_drawer():drawer].
    @
  }
  action open_drawer()
  {
    if(inv_penknife == 1)
    {
      @
        The drawer opens smoothly.  It is empty.
      @
    }
    else
    {
      @
        The drawer opens quietly.  Inside is a [penknife->lookat():penknife] and the smell of old wood.
      @
    }
  }
}

object penknife
{
  object_description = "Penknife";
  is_inv_item;

  action lookat()
  {
    if(inv_penknife == 1)
    {
      @
        The penknife is just a bit longer than your index finger.  Its scales are made from the shell of a
        rare mullosk that lives on Ghrabir, a planet in the very outer spiral of the galaxy.  The bolsters
        and blade are both an opaque glass composite and very hard.  It is quite sharp and very old.
      @
    }
    else
    {
      @
        The penknife is no longer than your index finger.  Its scales are made from the shell of a rare
        mullosk that lives on Ghrabir, a planet in the very outer spiral of the galaxy.  The bolsters
        and blade are both an opaque glass composite and very hard.  It is quite sharp and very old.
        You can [penknife->take():take] the knife.
      @
    }
  }
  action take()
  {
    inv_penknife = 1;
    hasweapon = 1;
    @
      You pocket the penknife.
    @
  }
}


object infopad
{
  action lookat()
  {
    @
      The infopad is a simple device.  It stores and retrieves information.  It absorbs kinetic energy
      and uses so little of it that it can run virtually forever without needing to be turned off. This
      particular infopad is on and displaying a menu:<br>
      -------------<br>
      [infopad->show_manifest():Manifest]<br>
      [infopad->show_log():Crew Member Log]<br>
      [infopad->show_notes():Notes]
    @
  }
  action show_manifest()
  {
    @
      <i>The manifest contains information about the items contained on the ship.  It is continually
      updated as</i> The Iron Guppy <i>goes about its ore mining duties.  Currently, the manifest
      lists all of the food, the three crewmembers, various supplies, and mined cargo aboard
      the vessel.  You glance over the list breifly.  Everything is as you last remember it.</i><br>
      -------------<br>
      [infopad->lookat():Main Menu]
    @
  }
  action show_log()
  {
    @
      <i>The crewmember log for The Iron Guppy is brief, since there are only three crew members.</i>
      <br><br>
      <b>Capt. Mogrii L. Fomeie</b> - Joined the Guppy: Mission+0 days.  Expertise: piloting, leadership, mining
      and minerals.  Notes: Captian and owner of The Iron Guppy; leader of the asteroid mining expedition;
      art collector.
      <br><br>
      <b>Sgt. Avery E. Sterbach</b> <i>(that's you!)</i> - Joined the Guppy: Mission+1 day.  Expertise: asteroid
      mining, zero-gravity combat, and basic ship engineering.  Notes: Outpost 5 Marine Guard, retired;
      abnormal physical strength.
      <br><br>
      <b>Dr. Jean T. Khomu</b> - Joined the Guppy: Mission+3 days.  Expertise: medicine, emergency rescue
      techniques, asteroid mining.  Notes: hard-working miner; doctor; expert historian.
      <br>
      -------------<br>
      [infopad->lookat():Main Menu]
    @
  }
  action show_notes()
  {
    @
      <i>The notes are your own personal notes taken while on the mission.  They are not a diary by any
      means so they are sporadic and there are large gaps in the 105 days aboard the </i>Guppy<i> so
      far.</i>
      <br><br>
      <b>Mission+1 day:</b> I like Captain Fomeie.  He seems very knowledgable and has been very straight-forward
      with me about all elements of our expedition.  The ship looks good.  I have inspected most of it.
      Time to move into my quarters.
      <br><br>
      <b>Mission+7 days:</b> Dr. Khomu is really nice.  She's going to make this mining expedition go quickly.
      <br><br>
      <b>Mission+10 days:</b> Jean is a good friend.  She's been helping me with the ship maintenance. We found
      a gap in one of the thruster seals today and she helped me fix it.
      <br><br>

      <b>Mission+50 days:</b> Jean, my friend, has been very cold to me lately.  I do not understand why.
      <br><br>
      <b>Mission+66 days:</b> Who ate all of the celebration cake?
      <br><br>
      <b>Mission+90 days:</b> We have almost filled the cargo hold with rare ore.  Just one last sector to go.
      <br><br>
      <b>Mission+104 days:</b> Jean finally broke the silence with me today to tell me she's worried about the
      last sector on our route.  She will not tell me why.<br>
      -------------<br>
      [infopad->lookat():Main Menu]
    @
  }
}


object infopad2
{
  action lookat()
  {
    @
      The infopad is a simple device.  It stores and retrieves information.  It absorbs kinetic energy
      and uses so little of it that it can run virtually forever without needing to be turned off. This
      particular infopad is on and displaying a menu:<br>
      -------------<br>
      [infopad2->show_manifest():Manifest]<br>
      [infopad2->show_log():Crew Member Log]<br>
      [infopad2->show_notes():Notes]
    @
  }
  action show_manifest()
  {
    @
      <i>The manifest contains information about the items contained on the ship.  It is continually
      updated as</i> The Iron Guppy <i>goes about its ore mining duties.  Currently, the manifest
      lists all of the food, the three crewmembers, various supplies, and mined cargo aboard
      the vessel.  You glance over the list breifly.  Everything is as you last remember it.</i><br>
      -------------<br>
      [infopad2->lookat():Main Menu]
    @
  }
  action show_log()
  {
    @
      <i>The crewmember log for The Iron Guppy is brief, since there are only three crew members.</i>
      <br><br>
      <b>Capt. Mogrii L. Fomeie</b> - Joined the Guppy: Mission+0 days.  Expertise: piloting, leadership, mining
      and minerals.  Notes: Captian and owner of The Iron Guppy; leader of the asteroid mining expedition;
      art collector.
      <br><br>
      <b>Sgt. Avery E. Sterbach</b> <i>(that's you!)</i> - Joined the Guppy: Mission+1 day.  Expertise: asteroid
      mining, zero-gravity combat, and basic ship engineering.  Notes: Outpost 5 Marine Guard, retired;
      abnormal physical strength.
      <br><br>
      <b>Dr. Jean T. Khomu</b> - Joined the Guppy: Mission+3 days.  Expertise: medicine, emergency rescue
      techniques, asteroid mining.  Notes: hard-working miner; doctor; expert historian.
      <br>
      -------------<br>
      [infopad2->lookat():Main Menu]
    @
  }
  action show_notes()
  {
    @
      <i>These are Dr. Jean T. Khomu's notes taken while on the mission.  They are not a diary by any
      means so they are sporadic and there are large gaps in the 105 days aboard the </i>Guppy<i> so
      far.</i>
      <br><br>
      <b>Mission+4 days:</b> Captain Fomeie is a nice man.  Really knows what he's doing.  My crewmate,
      Avery is extremely attractive.  He's in great shape, too. He seems nice, if maybe a little dense.
      His room is right next to mine.  I must get to know him better.
      <br><br>
      <b>Mission+8 days:</b> It's been nice so far on The Iron Guppy.  The work isn't bad.
      No need of my medical services yet, which is a good thing.
      <br><br>
      <b>Mission+11 days:</b> I pretended to know more than I do about thrusters yesterday.  I was able to work
      along side Avery in the engine room.  I made several
      attempts go get him to come to my quarters, but he pretended not to understand my advances.
      <br><br>
      <b>Mission+21 days:</b> Tired of all the sweet talk, I finally just decided to get real close to
      Avery today while he was working and 'through random chance', pose at all the right angles.  I'm not sure
      he even noticed!  Is he homosexual?
      <br><br>
      <b>Mission+43 days:</b> Physical hints aren't working.  I'm going to have to try to stimulate Avery
      intellectually.
      <br><br>
      <b>Mission+46 days:</b> Oh the hell with it.  Avery must be gay.  Just my luck.
      <br><br>
      <b>Mission+66 days:</b> I wonder who ate all of the celebration cake?  I wanted to, but didn't.
      <br><br>
      <b>Mission+100 days:</b> I've been doing a lot of research about the history of this area.  I have to admit
      I'm getting a little worried.  The last wave of prospectors came through here about fifty years
      ago and they ran into a lot of trouble.  There's an unknown race of pirates out here.
      <br><br>
      <b>Mission+105 days:</b> If anybody finds this, we were attacked by pirates.  Our communications are
      jammed.  I'm glad I smuggled a small P.F. Beam gun on board.<br>
      -------------<br>
      [infopad2->lookat():Main Menu]
    @
  }
}


object infopad3
{
  action lookat()
  {
    @
      The infopad is a simple device.  It stores and retrieves information.  It absorbs kinetic energy
      and uses so little of it that it can run virtually forever without needing to be turned off. This
      particular infopad is on and displaying a menu:<br>
      -------------<br>
      [infopad3->show_manifest():Manifest]<br>
      [infopad3->show_log():Crew Member Log]<br>
      [infopad3->show_notes():Notes]<br>
      [infopad3->show_astrolog():Astronavigation Log]
    @
  }
  action show_astrolog()
  {
    @
      <i>The Astronavigation Log contains all of the major sector and subsector nav points that have
      been visited in the course of the expedition.</i><br>
      Navpt 00A ARAMN STATION PT1 NV S 3492 SS 88232<br>
      Navpt 00B ARAMN NAV H12 PT6 CV S 3492 SS 17382<br>
      Navpt 00C CHOLOIA NAV03 PT1 NV S 6741 SS 38093<br>
      <i>etc...<br>
      You do your best to commit the information to memory.</i><br>
      -------------<br>
      [infopad3->lookat():Main Menu]
    @
    seen_astrolog = 1;
  }
  action show_manifest()
  {
    @
      <i>The manifest contains information about the items contained on the ship.  It is continually
      updated as</i> The Iron Guppy <i>goes about its ore mining duties.  Currently, the manifest
      lists all of the food, the three crewmembers, various supplies, and mined cargo aboard
      the vessel.  You glance over the list breifly.  Everything is as you last remember it.</i><br>
      -------------<br>
      [infopad3->lookat():Main Menu]
    @
  }
  action show_log()
  {
    @
      <i>The crewmember log for The Iron Guppy is brief, since there are only three crew members.</i>
      <br><br>
      <b>Capt. Mogrii L. Fomeie</b> - Joined the Guppy: Mission+0 days.  Expertise: piloting, leadership, mining
      and minerals.  Notes: Captian and owner of The Iron Guppy; leader of the asteroid mining expedition;
      art collector.
      <br><br>
      <b>Sgt. Avery E. Sterbach</b> <i>(that's you!)</i> - Joined the Guppy: Mission+1 day.  Expertise: asteroid
      mining, zero-gravity combat, and basic ship engineering.  Notes: Outpost 5 Marine Guard, retired;
      abnormal physical strength.
      <br><br>
      <b>Dr. Jean T. Khomu</b> - Joined the Guppy: Mission+3 days.  Expertise: medicine, emergency rescue
      techniques, asteroid mining.  Notes: hard-working miner; doctor; expert historian.
      <br>
      -------------<br>
      [infopad3->lookat():Main Menu]
    @
  }
  action show_notes()
  {
    @
      <i>These are Capt. Mogrii L. Fomeie's notes taken while on the mission.  They are not a diary by any
      means so they are sporadic and there are large gaps in the 105 days aboard the </i>Guppy<i> so
      far.</i>
      <br><br>
      <b>Mission+0 days:</b> I have lofty goals for this mission.  I know there are untold riches just waiting for
      us in the form of raw ore out there in the outer rim sectors.  I have lined up an able crew.  I will
      be picking up the first of them, Sgt. Sterbach tommorrow.
      <br><br>
      <b>Mission+1 days:</b> Sgt. Sterbach is all settled nicely.  Now just two days to Macchini Port to pick
      up Dr. Khomu.
      <br><br>
      <b>Mission+3:</b> Dr. Khomu is now aboard.  She is a very good-looking woman.
      <br><br>
      <b>Mission+13 days:</b> We have been extremely productive with the ore collection.  Everything is going as
      planned.
      <br><br>
      <b>Mission+21 days:</b> The Doctor has been putting on quite a show for that idiot, Stg. Sterbach! The fool
      doesn't even seem to notice her advances!
      <br><br>
      <b>Mission+46 days:</b> Sterbach must be a homosexual.
      <br><br>
      <b>Mission+66 days:</b> Ha ha ha, I ate the celebration cake and I don't feel bad about it at all.
      <br><br>
      <b>Mission+97 days:</b> Not much more ore now.  We're just about full.  This expedition has been incredibly
      productive...and lucrative.<br>
      -------------<br>
      [infopad3->lookat():Main Menu]
    @
  }
}



object room1_trunk
{
  action lookat()
  {
    if(room1_trunk_open == 1)
    {
      @
        The trunk is standard-issue.  It is made of a common metal/plastic alloy and is virtually
        indestructable.  All of the crewmembers have them, and they come with locks.  Yours is
        currently open.  Inside is a [room1_trunk->lookat_blanket():blanket], some
        [room1_trunk->lookat_clothes():clothes], and [room1_trunk->lookat_picture():a picture frame].
        You can [room1_trunk->close():close] the trunk.
      @
    }
    else
    {
      @
        The trunk is standard-issue.  It is made of a common metal/plastic alloy and is virtually
        indestructable.  All of the crewmembers have them, and they come with locks.  Yours does
        not have the lock attached to it.  You can [room1_trunk->open():open] the trunk.
      @
    }
  }
  action open()
  {
    room1_trunk_open = 1;
    @
      You open the trunk.  The hinges are completely silent.  Inside you find a
      [room1_trunk->lookat_blanket():blanket], some [room1_trunk->lookat_clothes():clothes], and
      [room1_trunk->lookat_picture():a picture frame].
    @
  }
  action close()
  {
    room1_trunk_open = 0;
    @
      The trunk lid swings shut as quietly as it opened.
    @
  }
  action lookat_blanket()
  {
    @
      (In the [room1_trunk->lookat():trunk])<br>
      The blanket is light blue, synthetic, soft, and extremely warm.  The material is plastfiber
      which is not only incredibly durable, but has a heat conduction point approaching zero.
      Even if the ship's heating and cooling systems failed completely, the blanket should be
      able to keep a spacer such as yourself at habitable temperatures.
    @
  }
  action lookat_clothes()
  {
    @
      (In the [room1_trunk->lookat():trunk])<br>
      You have a second change of clothes in your trunk, neatly pressed and waiting.  You have
      never worn them.  Bacteria cannot live on the surface of your clothing, and all foreign
      matter such as dust and grease wipe away without leaving a trace.  A simple rub-down and
      shake-off in the morning is all that is needed to keep your clothing clean and dry.
    @
  }
  action lookat_picture()
  {
    @
      (In the [room1_trunk->lookat():trunk])<br>
      The framed picture is a simple plastic-print sandwiched in thin glass.  It shows a
      smiling woman standing in front of a green rock formation.  A nearby sign indicates
      that the formation is <i>The Sign of the Ulthighniki's Return</i>, a religious symbol
      created by Ulthignoptic Priests thousands of years ago.  The woman was a friend you
      knew long ago back at the Academy. you took that picture yourself ten years ago on a
      vacation to the Snarkithan system.
    @
  }
}



object disease
{
  object_description = "A Disease";
  is_inv_item;
  
  action lookat()
  {
    @
      You have a nasty disease.  It allows you to [disease->cough():cough] and [disease->vomit():vomit].
    @
  }
  action cough()
  {
    @
      You cough violently.  You wipe your hand on your chin and see a red smear of blood.
    @
  }
  action vomit()
  {
    @
      You vomit for what seems like hours.  Just when you think there is nothing left to disgorge,
      you manage to start vomiting parts of your stomach wall in large, bloody rents.
    @
  }
}



object bunk
{
  action lookat()
  {
    @
      The bunk is a very simple contraption.  It is bolted securely to the starboard bulkhead
      there are several straps hanging on the wall that can be used to secure the blankets,
      mattress, and sleeping person to the bunk when the gravity generators are offline.
      The warm blankets look inviting.  You can [bunk->sleep():hop back into] the small
      bed and catch some more shut-eye if you want.
    @
  }
  action sleep()
  {
    location = prison;
    inv_disease = 1;
    @
      The bunk is, indeed quite comfortable.  You sleep very well.  You wake up and unknown amount
      of time later, in a very small and very dark place.   You get the feeling maybe you shouldn't
      have gone back to sleep!
    @
  }
}



object prison
{
  object_description = "Unknown Prison";

  action lookat()
  {
    @
      You are in a very small cell of some sort.  There is no bed of any kind, and in the corner near
      your head there is a foul-smelling hole in the floor that must be the toilet.  The metal door
      at the far wall seems to be quite secure and there is no visible locking mechanism.  All you can
      do is [prison->wait():wait for someone to come].
    @
  }
  action wait()
  {
    @
      Eventually, some food is pushed through a slot in the door.  You eat it out of starvation. When
      you are done, you feel quite sleepy.  You can [prison->sleep():go to sleep] now.
    @
  }
  action sleep()
  {
    @
      You sleep on the cold, hard floor for an indeterminate amount of time.  When you wake up, you
      momentarily forget that you are not still on the <i>Guppy</i>, but when you look around and find
      that you are sleeping on the floor of some unknown dungeon, it all comes back to you.
      Your joints are stiff and movement is painful at first.  You stand for a while, but eventually
      resort to sitting on the floor with your back against the wall.  There is nothing to do now but
      [prison->wait():wait].
    @
  }
}


object passageway
{
  object_description = "Aft Passageway";
  action lookat()
  {
    @
      The short passageway is dim, as always.  On the starboard end is the
      [passageway->open_room1door():door to your quarters].  The [passageway->open_room2door():door
      to Dr. Khomu's quarters] is at the port end.  Forward, to the bow, is a
      [passageway->open_galleydoor():door to the galley].  On the floor is a large, circular
      hatch which leads down to the engine room.  There is a red, illuminated
      [passageway->gotoengineroom():button that opens the hatch].  In case of an emergency, the
      hatch seals the thrusters and superspace engines off from the rest of the ship.  All of the
      passageway's walls and ceiling are covered with dozens of
      [passageway->checklockers():storage lockers].
    @
    if(galley_enemies_alive == 1)
    {
      @
        There are muffled sounds of conversation in harsh voices coming from the galley.
      @
    }
    else
    {
      @
        It is completely silent.
      @
    }
  }
  action checklockers()
  {
    @
      You open a few of the lockers, but just as you expected, they're all full of food, blankets,
      and power cells.
    @
  }
  action open_room1door()
  {
    location = room1;
    @
      You step quickly into your quarters and close the door behind you.
    @
  }
  action open_room2door()
  {
    location = room2;
    @
      You open the door to Dr. Khomu's quarters and enter.  You close the door behind you.
    @
  }
  action open_galleydoor()
  {
    if(galley_enemies_alive == 1)
    {
      @
        You open the galley door very quietly and peek inside.  You see two creatures standing
        in the middle of the room.  They are roughly your size, but are clearly not human.
        Currently, they are facing the other way and are communicating with some device
        you can only assume must be a radio transmitter.  Their language is completely foreign
        to your ears, and somewhat musical.  Their shiny red suits cover most of their bodies,
        but their exposed skin is dark, ribbed, and covered in thin spines that might be hair.
        You can [galley->kill():attempt to kill] them or
        [galley->communicate():try to communicate] with them.
      @
    }
    else
    {
      @
        With the two galley aliens quite dead, you stride into the galley with no hesitancy at all.
      @
      location = galley;
    }
  }
  action gotoengineroom()
  {
    location = engineroom;
    @
      You press the red button.  The hatch lifts with minimal noise.  You head down the rungs to
      the engine room and hit the 'close' button to close the hatch behind you.
    @
  }
}


object galley
{
  object_description = "The Galley";

  action lookat()
  {
    @
      This is the galley, one of your favorite places on the whole ship.  This is
      not only where all meals are consumed, but also a meeting place for the crew.
      There are cabinets along all of the walls.  All of the
      [galley->cooking():basic cooking gear] is on the starboard side of the room.
      There are two small benches on the port side.  The
      [galley->passdoor():door to the aft passageway] is to the aft and the
      [galley->bridgedoor():door to the bridge] is to the bow.  There are
      [galley->aliens():two dead alien creatures] on the floor.
    @
  }

  action cooking()
  {
    @
      Come to think of it you've been awake for a while, and you are pretty hungry.
      You get out a box of mix and create a short stack of tasty pancakes.  You eat
      the steaming-hot flapjacks at the bench with your feet propped up on the hard
      armor shell of one of the dead aliens.  That really hit the spot.
    @
  }

  action aliens()
  {
    @
      You examine the bodies.  Unfortunately, there isn't much you can tell about the
      creatures now that they are dead.  All of their equipment is so alien to you
      that you cannot even figure out what it might be for.  You cannot even tell
      if they are wearing any weapons.
    @
  }

  action passdoor()
  {
    @
      You step out into the main passageway.
    @
    location = passageway;
  }

  action bridgedoor()
  {
    if(bridge_enemy_alive == 1)
    {
      @
        You open the door to the bridge just a crack and peek inside.  You see another
        alien creature standing in front of the main navigational display.  It is
        fiddling with something in its hands.  It has a shiny red suit of armor
        just like the two dead creatures in the galley.
        You can [bridge->kill():attempt to kill] it or
        [bridge->communicate():try friendly communication] with it.
      @
    }
    else
    {
      @
        You enter the bridge, quite pleased that when you open the door, it smashes
        into the dead alien's head.
      @
      location = bridge;
    }
  }

  action kill()
  {
    if(hasweapon == 0)
    {
      @
        Completely unarmed, you leap at the creature closest to you.  Your tackle is
        succesful, but the second creature turns with surprising speed and grace
        and aims something at your head.  An eyeblink later, there is an orange
        flash of light and you cease to live.
      @
      location = death;
    }
    if(inv_penknife == 1)
    {
      @
        You lunge forward with the only weapon you have, your penknife.
        With great satisfaction, you sink the small blade completely up to the handle
        in the skull of the creature closest to you. However, the second creature
        turns with surprising speed and grace
        and aims something at your head.  An eyeblink later, there is an orange
        flash of light and you cease to live.
      @
      location = death;
    }
    if(haveuselessgun == 1)
    {
      @
        You pull the PFB gun and aim it at the first creature.  You squeeze the trigger
        but nothing happens.  Perhaps you should have checked the charge meter!
        Just then, the creatures notice you.  The creature closest to you
        aims something at your head.  An eyeblink later, there is an orange
        flash of light and you cease to live.
      @
      location = death;
    }
    if(gun_state == 2)
    {
      @
        You pull the PFB gun and aim it at the first creature.  A quick squeeze of the
        trigger reduces the fiend's upper torso to a pulp.  There is a fine blue
        mist in the air.  The second creature has excellent reflexes, and turns
        quickly towards you.  However, you have the advantage of both surprise and
        your military service.  The second creature is dispatched as quickly as the
        first. You stand triumphant over their bodies.
      @
      location = galley;
      galley_enemies_alive = 0;
    }
  }

  action communicate()
  {
    @
      "Hello, my name is..." you begin.  The creatures whirl in unison and draw tiny devices
      you do not recognize from their suits.  Their actions appear violent. You raise
      your hands to protect yourself and start backing away.  You are too late, the creature
      closest to you gets a shot off first.  There is a orange flash of light and you feel
      a sudden numbness below the neck.  There is a sound in your ears like ocean waves
      and a thousand drums.  You try to take a breath, but cannot.  The hissing sound of
      the air escaping from your lungs is the last sound you hear before you die.
    @
    location = death;
  }
}


object bridge
{
  object_description = "The Bridge";

  action lookat()
  {
    @
      The main feature of the bridge is the horseshoe-shaped
      [bridge->console():main console].  There is
      a large black chair in the middle of the horseshoe.  A giant display covers the
      entire wall to the bow of the room.  To starboard is Captain Fomeie's
      [bridge->bunk():bunk]. The [bridge->door():door to the galley] is on the aft wall.
      There is quite a bit of art on the walls of the bridge.  It covers many of the
      lockers and shelves in the room. The [bridge->alien():dead alien] is in the middle
      of the room.
    @
    if(buried == 0)
      @
        You are deeply saddened to see what has become of your
        fellow crewmates.  The [bridge->bodies():dead bodies] of both Captain Fomeie
        and Dr. Khomu are lying on the port side of the room.
      @
    }
  }

  action console()
  {
    @
      This is the main console, used to run all of the systems on the ship.  You can see
      there are four main areas on the console:<br>
      [bridge->c_env():Environmental]<br>
      [bridge->c_sys():Subsystems and Diagnostics]<br>
      [bridge->c_cargo():Cargo Hold]<br>
      [bridge->c_nav():Navigation and Maneuvering]
    @
  }

  action c_env()
  {
    @
      In the environmental controls, you can adjust everything in the ship from the percentage
      of oxygen in the air to the temperature in each individual room.  You play around with
      the controls for a little while, making the bridge cold and then warm.  Eventually you
      become bored with it.
      <br>
      ([bridge->console():Main Menu])
    @
  }

  action c_sys()
  {
    if(ship_depirated == 1)
    {
      @
        All systems appear to be working normally.
        <br>
        ([bridge->console():Main Menu])
      @
    }
    else
    {
      @
        This area of the panel allows you to micromanage nearly all elements of the ship's functions
        down to the voltage used in the kitchen appliances.  It also contains diagnostic information
        about all of the systems on the ship should any failures be detected.
        There are currently a huge number of errors relating to the navigational thrusters.  From what
        you can tell, none of the signals from the main navigational computer are getting through to
        the nav thrusters at all.  You frown.  There must be something physically wrong with the
        ship.  If that is so, then the engine room is the only place where such a problem can be
        fixed.
        <br>
        ([bridge->console():Main Menu])
      @
      knowaboutcontrol = 1;
    }
  }

  action c_cargo()
  {
    @
      From this area of the console, you can control all of the cargo bay doors and loading
      equipment.  You decide not to touch any of these controls.  The ore currently held in the
      cargo bay is worth a small fortune.
      <br>
      ([bridge->console():Main Menu])
    @
  }

  action c_nav()
  {
    if(ship_depirated == 0)
    {
      @
        The navigation panel seems to be haywire.  Not only can you not access any of the
        maneuvering controls, but you cannot even set a course.  Looks like you'll need to
        take a look at the diagnostics panel.
        <br>
        ([bridge->console():Main Menu])
      @
    }
    else
    {
      @
        You are extremely pleased to see that the navigation panel is behaving properly.  You can't
        wait to get out of this dangerous sector.  You never know when more of those alien bastards
        will show up.  You're no pilot, but you do know how to [bridge->setcourse():set a course].
        <br>
        ([bridge->console():Main Menu])
      @
    }
  }

  action setcourse()
  {
    @
      The console prompts you for the navigation points of your course.
    @
    if(seen_astrolog == 1)
    {
      @
        You set the navigation points that you saw in the captain's infopad.
        Your grin turns into a smile.  You're going home!
      @
      location = home;
    }
    else
    {
      @
        Unfortunately, you have absolutely no clue what navigation points to set in order to get home.
        You stare blankly at the display in frustration.
        <br>
        ([bridge->c_nav():Navigation Menu])
      @
    }
  }

  action bunk()
  {
    @
      This is Captain Fomeie's bunk.  It is identical to yours and Dr. Khomu's.  There is
      an [infopad3->lookat():infopad] lying on the bunk.
    @
  }

  action alien()
  {
    @
      Unfortunately, you can't glean much more information from this alien than you could
      from the ones in the galley.  However, you inspect the gadget it was holding quite
      carefully.  It has many buttons and glyphs you could never decipher, but if you had
      to guess what was on the screen, you would say that it looked like navigational points.
    @
  }

  action bodies()
  {
    @
      Because they were your friends, you give your fellow crewmates a burial at space.
      The bodies drift silently away into the darkness of the Void.  Now you just have to
      figure out how to get yourself home properly.
    @
    buried = 1;
  }

  action door()
  {
    @
      You slip out of the bridge and into the galley.
    @
    location = galley;
  }

  action kill()
  {
    if(haveuselessgun == 1)
    {
      @
        You pull the PFB gun and aim it at the first creature.  You squeeze the trigger
        but nothing happens.  Perhaps you should have checked the charge meter!
        The creature aims something at your head.  An eyeblink later, there is an orange
        flash of light and you cease to live.
      @
      location = death;
    }
    if(gun_state == 2)
    {
      @
        You pulp the creature's skull with the PFB gun and it slumps to the ground, dead.
        That's one less alien fiend in the universe.
      @
      location = bridge;
      bridge_enemy_alive = 0;
    }
  }

  action communicate()
  {
    @
      You put on your best smile and put our your hand to welcome the alien to <i>The
      Iron Guppy</i>.  You cough politely to get its attention.  The alien
      turns immediately and punches you in the head with such great strength that
      it pushes your brain out of the back of your skull.  It seems you are dead.
    @
    location = death;
  }
}


object home
{
  object_description = "Home";
  
  action lookat()
  {
    @
      You have made it home!  Loosing two friends hasn't been easy, but you're
      coping.  The raw ore and <i>The Iron Guppy</i> both gained you quite a bit
      of gold once they were put on the market.  On top of that, you're a bit of a local
      hero. You're the first person to bring back physical evindence of Khjurian pirates,
      and three bodies, no less!
      <br><br>
      You look out from your balcony as lightning strikes some small island far out at
      sea.  It's been quite a journey from the Marine Corps, to asteroid mining, to
      this extravagant home perched on a rocky outcropping on the pleasure world, Maris Velus.
      <br><br>
      So far, so good.
      <br><br>
      The end.
    @
    inv_gold = 1;
  }
}


object gold
{
  object_description = "Copious Gold";
  is_inv_item;

  action lookat()
  {
    @
      You have enough gold, now, to live comfortably the rest of your life.
    @
  }
}


object death
{
  object_description = "Death";

  action lookat()
  {
    @
      You are dead, and you're pretty darned sure you don't like it.  You can now be reborn
      and [start->lookat():try life again].
    @
  }
}


object room2
{
  object_description = "Dr. Khumo's Quarters";

  action lookat()
  {
    if(room2_lightswitch_on == 0)
    {
      @
        You are in complete darkness.  You cannot see anything in the room.  You can, however,
        feel the [room2->fliplight():lightswitch] on the wall.
      @
    }
    else
    {
      @
        The light is on in Dr. Khumo's Quarters.  Her quarters are nearly identical to yours.
        A [room2_trunk->lookat():trunk] and [bunk2->lookat():bunk] are on the port wall
        facing the outside of the ship.  To the port side is a large
        [room2->checkmeds():medical supply kit].  To the bow is the 
        [room2->open_door():door to the aft passageway].  There is a 
        [room2->fliplight():lightswitch] on the wall next to the door.
      @
    }
  }
  action checkmeds()
  {
    @
      You look in the huge kit.  Unfortunately, besides the medical supplies, most of which you
      recognize from basic medicine in the Marines, there is nothing that you can see that will be
      of immediate use to you.
    @
  }
  action open_door()
  {
    location = passageway;
    @
      You step into the passageway and close the door to Dr. Khumo's quarters quietly behind you.
    @
  }
  action fliplight()
  {
    if(room2_lightswitch_on == 1)
    {
      room2_lightswitch_on = 0;
      @
        You turn the light switch off.  The darkness fills the room once again.  The afterimage of
        the room quickly fades from your eyes.
      @
    }
    else
    {
      room2_lightswitch_on = 1;
      @
        You turn the light switch on.  Dr. Khumo's room is now bathed in light.
      @
    }
  }
}



object bunk2
{
  action lookat()
  {
    @
      The bunk is a very simple contraption.  It is bolted securely to the starboard bulkhead
      there are several straps hanging on the wall that can be used to secure the blankets,
      mattress, and sleeping person to the bunk when the gravity generators are offline.
      There is an [infopad2->lookat():infopad] laying casually near the head of the bunk.
      The warm blankets look inviting.  You can [bunk->sleep():jump into] Dr. Khumo's bunk
      and catch some more shut-eye if you want.
    @
  }
  action sleep()
  {
    location = prison;
    inv_disease = 1;
    @
      The bunk is, indeed quite comfortable.  You sleep very well.  You wake up and unknown amount
      of time later, in a very small and very dark place.
    @
  }
}



object room2_trunk
{
  action lookat()
  {
    if(room2_trunk_open == 1)
    {
      @
        Just like your own, inside the trunk is a [room2_trunk->lookat_blanket():blanket] and some
        [room2_trunk->lookat_clothes():clothes].
      @
    }
    else
    {
      @
        The trunk is standard-issue.  It is made of a common metal/plastic alloy and is virtually
        indestructable.  All of the crewmembers have them, and they come with locks.  Dr. Khumo's
        trunk has a flimsy-looking lock attached to it.  You can
        [room2_trunk->open():attempt to open] the trunk.
      @
    }

    if(topen_noguninv == 1)
    {
      @
        However, Dr. Khumo's trunk contains one item not
        in your own: a Phase 3 P.F.B. (Particle Force Beam) [gun->lookat():Gun].  As an ex-marine, you
        are intimately familiar with the weapon and its devastating effects on a living organism.  You
        breifly wonder how Dr. Khumo managed to get her hands on one.  But there are more pressing
        matters at hand, and you brush the unanswerable question aside.
      @
    }
  }
  action open()
  {
    @
      You strain against the lock will all of your extraordinary might.  As flimsy as it looks, the lock
      is too strong to break with your bear hands.
    @
    if(inv_penknife == 1)
    {
      inv_penknife = 0;
      room2_trunk_open = 1;
      topen_noguninv = 1;
      hasweapon = 0;
      @
        <br>
        Then you remember that you are carrying your small penknife.  Perhaps, you think, you could
        use the extra leverage to pry open the lock.  You flip out the diminutive blade and put your full
        force behind it.  You hear it snap and your heart sinks.  But then you notice that the lock has
        also given way.  You drop the handle of the now-useless penknife on the floor and pull away the
        remains of the lock. You can now [room2_trunk->lookat():look inside] the trunk.
      @
    }
  }
  action lookat_blanket()
  {
    @
      (In the [room2_trunk->lookat():trunk])<br>
      The blanket is light blue, synthetic, soft, and extremely warm.  The material is plastfiber
      which is not only incredibly durable, but has a heat conduction point approaching zero.
      Even if the ship's heating and cooling systems failed completely, the blanket should be
      able to keep a spacer such as yourself at habitable temperatures.  Dr. Khumo's looks to have
      never been used.
    @
  }
  action lookat_clothes()
  {
    @
      (In the [room2_trunk->lookat():trunk])<br>
      Dr. Khumo's clothes are much like your own only, well, shaped differently.  They are, however
      made of the same material as your own.  Bacteria cannot live on the surface, and all foreign
      matter such as dust and grease wipe away without leaving a trace.  A simple rub-down and
      shake-off in the morning is all that is needed to keep the clothing clean and dry.
    @
  }
}


object gun
  object_description = "PFB Gun";
  is_inv_item;

  action lookat()
  {
    @
      The Particle Force Beam gun is a squat, ugly piece of metal, completely berift of all ornamentation.
      The gun is very small and has virtually no recoil.  It contains internal dual-axis gyroscopes
      and when used in conjuction with the top-mount magnifying sight, it is easily lethal at 2000 meters.
      On the butt of the gun is the [gun->cell():electrocell compartment].  On the left side is the tiny
      rectangular particle casing ejection port.  On the right side is the [gun->meter():charge meter].
    @

    if(inv_gun == 0)
    {
      @
        You can [gun->take():take] the gun.
      @
    }
  }

  action take()
  {
    @
      You pocket the gun.
    @
    inv_gun = 1;
    topen_noguninv = 0;
    hasweapon = 1;
    haveuselessgun = 1;
  }

  action meter()
  {
    @
      You toggle the charge meter.  A small colored bar illuminates on the smooth surface of the
      weapon, displaying the current charge in the electrocell.
    @
    if(gun_state == 0)
    {
      @
        Unfortunately, with the current electrocell loaded in this gun, it won't be firing any
        shots any time soon.  The charge meter barely shows a charge at all.
      @
    }
    if(gun_state == 1)
    {
      @
        With no electrocell in this gun, the charge meter cannot light up at all.  This gun
        is not going to do any damage unless you throw it, and even then it's really too light
        for that kind of thing.
      @
    }
    if(gun_state == 2)
    {
      @
        With the fresh electrocell loaded into the gun, it shows a nice, full, healthy charge.
        You'll run out of the thousands of tiny projectile particles in the cartridge long before
        this electrocell is depleated.
      @
    }
  }

  action cell()
  {
    @
      You thumb open the latch that seals the electrocell compartment.
    @
    if(gun_state == 1)
    {
      @
        The gun is devoid of electrocell, just as expected.
      @
    }
    if(gun_state == 0)
    {
      @
        Out slides the most blackened and corroded electrocell you have ever seen. It's amazing
        that the pitted and scored cell can hold a charge at all.
      @
      inv_oldcell = 1;
      gun_state = 1;
    }
    if(gun_state == 2)
    {
      @
        Out slides the nice, new lantern battery.  It gleams in the pale light.
      @
      inv_newcell = 1;
      gun_state = 1;
      haveuselessgun = 1;
    }
  }
}


object oldcell
  object_description = "Old Cell";
  is_inv_item;

  action lookat()
  {
    @
      This old electrocell appears to be extremely old.  It is covered with the kind of stains
      and corrosion about which fables are made.  You can [oldcell->drop():drop] this old hunk
      of crap.
    @
  }

  action drop()
  {
    @
      You drop the hideous electrocell.  It falls to the floor, and to your surprised, it actually
      breaks in half, spilling green fluid all over.
    @
    inv_oldcell = 0
  }
}


object newcell
  object_description = "New Cell";
  is_inv_item;

  action lookat()
  {
    @
      This electrocell is so new, it shines.  There is plenty of charge left in it.  You can load
      this cell [newcell->lantern():back into the lantern].
    @
    if(gun_state == 1)
    {
      @
        You can also load this cell [newcell->gun():in the PFB gun].  It looks to be exactly the
        same as the old one, just in much better shape.
      @
    }
  }

  action lantern()
  {
    @
      You uncap the lantern and load the electrocell back into it.  You flip the light on momentarily
      to make sure it works.  It does.
    @
    lantern_state = 0;
    inv_newcell = 0;
    lanternnocell = 0;
  }

  action gun()
  {
    @
      You open up the PFB gun's electrocell chamber and load the cell.  This gun is locked and loaded.
    @
    gun_state = 2;
    inv_newcell = 0;
    haveuselessgun = 0;
  }
}


object engineroom
{
  object_description = "The Engine Room";

  action lookat()
  {
    @
      You are in the engine room of <i>The Iron Guppy</i>.  The room is not only the main
      thruster engine maintenance and control area, but also a general workshop.  There are
      tool cabinets to the starboard side.  On the port side is a workbench and several analysis
      machines.  Across from you is a [crawlspace->see():crawlspace] with direct access to the
      navigation thruster controls.
      There is a [engineroom->hatch():hatch] to the aft passageway
      on the ceiling and rungs on the wall for accending through the hatch on the wall behind you.
    @
    if(inv_lantern == 0)
    {
      @
        There is a [lantern->lookat():lantern] on a shelf.
      @
    }
  }

  action hatch()
  {
    @
      You hit the hatch button and climb the rungs up to the aft passageway.
    @
    location = passageway;
  }
}


object lantern
{
  object_description = "Lantern";
  is_inv_item;

  action lookat()
  {
    @
      The electroluminescant lantern is made of a bright yellow rubberized polymer.
      It produces a beam of very bright and even white light.  Airtight, the lantern
      can be used in a vacuum, in pressurized gas, and in liquids.
    @
    if(inv_lantern == 1)
    {
      @
      There is a large
      [lantern->switch():switch] on top of the lantern that turns it on and off.
      There is a [lantern->cap():cap] on the end that can be screwed off.
      @
    }
    else
    {
      @
        You can [lantern->take():take] the lantern.
      @
    }
  }

  action take()
  {
    @
      You grab the lantern and take it with you.
    @
    inv_lantern = 1;
  }

  action switch()
  {
    if(lantern_state == 0)
    {
      @
        You flip the switch and the lantern lights up gloriously, clearly illuminating
        everything you aim it at.
      @
      lantern_state = 2;
    }
    else
    {
      @
        Darkness.
      @
      lantern_state = 0;
    }
    if(lanternnocell == 1)
    {
      @
        You flip the switch, but nothing happens.  You toggle it on and off a couple
        times and shake it.  But then you remember that you took out the electrocell.
      @
    }
  }

  action cap()
  {
    if(lanternnocell == 0)
    {
      @
        You unscrew the cap and a shiny new electrocell slides out.  You grab the cell and
        screw the cap back on.
      @
      inv_newcell = 1;
      lanternnocell = 1;
      lantern_state = 1;
    }
    else
    {
      @
        You unscrew the lantern's cap and peer inside the empty electrocell compartment.  It is
        pitch-black inside.  For a breif moment, you think about how nice it would be
        to have a lantern to shine into the dark cavity.  You screw the cap back on.
      @
    }
  }
}


object crawlspace
{
  object_description = "Nav Thruster Crawlspace";

  action lookat()
  {
    @
      You are in the crawlspace.  It is very cramped and dimly lit.  There are dozens of
      switches and ports around you, and hundreds of indicator lights.  Nevertheless, it is orderly
      and mostly sane.
      You can [crawlspace->getout():crawl out] of the crawlspace.
    @
    if(knowaboutcontrol == 1)
    {
      @
        You can [crawlspace->lookforrc():look] for any anomalies in the area.
      @
    }
  }

  action getout()
  {
    @
      You crawl out of the crawlspace and stand up straight.  You stretch your joints and
      pop a few misplaced vertibre back into place.
    @
    location = engineroom;
  }

  action lookforrc()
  {
    if(lantern_state == 2)
    {
      @
        By your lantern's glow, you can now see what you would never have noticed before.
        It is a tiny control box with a single green light burrowed deep in one of the
        control panels just below the midship starboard thruster dataport.  You rip it out,
        and a knot of coiled microwires comes with it.  The tiny green light fades out.
        The pirate navigational remote control has been safely removed.
        You breathe a sigh of relief.  The ship is now under your control.
      @
      ship_depirated = 1;
      knowaboutcontrol = 0;
    }
    else
    {
      @
        You know you are looking for something out of place, but in the dim light, you really
        can't see much.  Perhaps if you turned on your lantern.
      @
    }
  }

  action see()
  {
    @
      The crawlspace is essentially a dimly-lit, two meter long passage only large enough to
      crouch in.  In extreme emergencies, a spacer could crawl into the tight area and
      plug into direct control of the ship's navigation thrusters.  The steering would then be
      guided by a remote nav computer hookup.
      You can [crawlspace->crawl():crawl] into the crawlspace.
    @
  }

  action crawl()
  {
    @
      You bend down and cram yourself into the tiny area.
    @
    location = crawlspace;
  }
}