ADL Scenario Source Code

    Sayer = Proc(str, flag)
    {
        If (!flag) {
    	$say(str, "\n");
        }
        Return str;
    }

    $ALL(LDESC) = Proc()
    {
        "You shouldn't be here at all.  This is THE COSMIC ALL.\n";
    }
    $ALL(SDESC) = Proc() { Return Sayer("THE COSMIC ALL", $arg(0)); }

    rdsc = Proc() {Return Sayer("Road", $arg(0));}
    rldsc = Proc() {"You are on the road.\n";}

    road1(SDESC) = rdsc;
    road1(LDESC) = Proc()
    {
        "You're on a dirt road going east-west.  Tall stalks of "
        "corn grow on either side of the road.\n";
    }

    road2(SDESC) = rdsc;		road2(LDESC) = rldsc;

    road3(SDESC) = Proc() { Return Sayer("Bridge", $arg(0)); }
    road3(LDESC) = Proc()
    {
        If (dragon.KILLED)
    	"You are on a bridge over a swift river.  ";
        Else
    	"You are on a bridge over a dry river bed.  ";

        "The river goes north-south, and the road continues east-west.\n";
    }

    road4(SDESC) = rdsc;		road4(LDESC) = rldsc;
    road5(SDESC) = rdsc;		road5(LDESC) = rldsc;

    road6(LDESC) = Proc()
    {
        "A road from the west forks north and south here.  To the east is a"
        " dense-looking forest; cornfields are seen on the west.\n";
    }
    road6(SDESC) = Proc() {Return Sayer("Fork in road", $arg(0));}

    road7(SDESC) = rdsc;
    road7(LDESC)= Proc()
    {
        "The road stretches a long way east-west.  A short fence divides the "
        "road from the cornfields beyond.  Please don't tresspass.\n";
    }

    gdsc = Proc()
    {
        "You are somewhere in a cornfield.  The cornstalks are ";
        If (dragon.KILLED)
    	"green and healthy.\n";
        Else
    	"brown and dry-looking.\n";
    }

    gsdsc = Proc() {Return Sayer("Cornfield", $arg(0));}
    fsdsc = Proc() {Return Sayer("Forest", $arg(0));}

    gard1(SDESC) = gsdsc;            gard1(LDESC) = gdsc;
    gard2(SDESC) = gsdsc;            gard2(LDESC) = gdsc;

    frst1(SDESC) = fsdsc;            frst1(LDESC) = fdsc;

    farm1(SDESC) = Proc() {Return Sayer("Farm Entrance", $arg(0));}
    farm1 (LDESC) = Proc()
    {
        "You are at the entrance on the south side of a rundown "
        "farmhouse.  Someone has painted 'DIE, HEATHENS' on the "
        "front door, which barely stays on its hinges.  Marks of "
        "smoke and flame are visible.  A road runs to the south, "
        "and you may walk around the farmhouse by going east or west.\n";
    }

    farm2(LDESC) = Proc()
    {
        "You are in the entry hall of a long-deserted old farmhouse. "
        "The floor is covered with the dust of years of disuse.  The "
        "front door to the south is open, and there is another room "
        "to the north.  A stairway on the east side of the room goes up.\n";
    }
    farm2(SDESC) = Proc() { Return Sayer("Entry hall", $arg(0));}

    farm3(LDESC) = Proc()
    {
        "You are on the east side of the farmhouse.  To the east, a forest "
        "stretches away into the distance.  The entrance to the farmhouse "
        "is to the south.\n";
    }
    farm3(SDESC) = Proc() {Return Sayer("East of Farmhouse", $arg(0));}

    farm4(LDESC) = Proc()
    {
        "You are on the west side of the farmhouse.  The cornfields "
        "stretch away forever to the west.  The entrance to the house "
        "is to the south.\n";
    }
    farm4(SDESC) = Proc() {Return Sayer("West of Farmhouse", $arg(0));}

    farm5(LDESC) = Proc()
    {
        "You are on the north side of the farmhouse.  A high fence "
        "separates you from the cornfields to the north and west. ";
        $move(insignia, farm5);
    }
    farm5(SDESC) = Proc()
    {
        $move(insignia, farm5);
        Return Sayer("North of Farmhouse", $arg(0));
    }

    farm6(LDESC) = Proc()
    {
        "You are in an old, empty farmhouse kitchen.  All the "
        "cupboards and cabinets are bare (unless you can eat the "
        "thick layer of dust which covers everything).\n";
    }
    farm6(SDESC) = Proc() {Return Sayer("Kitchen", $arg(0));}

    farm7(LDESC) = Proc()
    {
        "You are in the upstairs bedroom of the farmhouse.  All the "
        "windows are boarded up, and nobody has slept here for years. "
        "To the east is an exit leading to the entry hall below.  ";
        If (bed.OPENED) {
            "In the middle of the room is an old, rickety bed.  The west wall ";
    	If (panel.OPENED)
    	    "has a panel missing, revealing a secret stairway down.\n";
    	Else
    	    "seems to have a loose panel.\n";
        }
        Else {
            "Against the west wall is an old, rickety bed (which may be "
            "why nobody has slept here for years).\n";
        }
    }
    farm7(SDESC) = Proc() {Return Sayer("Bedroom", $arg(0));}

    PanL = Proc()                  // Try to go through panel
    {
        If (panel.OPENED) {
    	$move($ME, cel01);
    	"You descend into the gloom...\n";
        }
        Else If ($loc($ME) == farm7) {
    	cg();
    	$exit(1);
        }
    }

    town1(SDESC) = Proc() {Return Sayer("Town", $arg(0));}
    town1(LDESC) = Proc()
    {
        "You are at the northern end of a one-horse town.  Although the buildings "
        "are in good shape, all seem deserted.  You can't even find one horse. "
        "To the east is an old smithy.  On the west side of the street is an "
        "abandoned hotel.  The street runs north and south.\n";
    }

    town2(SDESC) = Proc() {Return Sayer("Business District", $arg(0));}
    town2(LDESC) = Proc()
    {
        "You are at the southern end of a one-horse town.  This is the "
        "business district.  On the east side of the street is an old "
        "building with a tastefully lettered sign, 'Arpa-Citizen's Savings'. "
        "To the west is the legendary 'Packet Inn'.  The street runs "
        "north-south.\n";
    }

    town3(SDESC) = Proc() {Return Sayer("Blacksmith's Shop", $arg(0));}
    town3(LDESC) = Proc()
    {
        "You're in what is left of a once-thriving blacksmith's shop. "
        "Long ago abandoned, nothing much of interest remains.\n";
    }

    town4(SDESC) = Proc() {Return Sayer("Flophouse", $arg(0));}
    town4(LDESC) = Proc()
    {
        "You're in the Flophouse hotel.  Never worth the visit even in "
        "its heyday, a quick search reveals nothing but a lot of dusty rooms.\n";
    }

    town5(SDESC) = Proc() {Return Sayer("Bank", $arg(0));}
    town5(LDESC) = Proc()
    {
        "You are in the ancient and venerable institution of Arpa-Citizen's "
        "Savings (there's a branch in your town).  The lobby is tastefully "
        "decorated in marble.  The only feature is a strange sweet-smelling "
        "well in the center of the room.  A mysterious plaque on the side "
        "reads:\n"
        "\t'Drop your bits here!'\n";
    }
    TWN5y = Proc()
    {
        $ME.HAS = $ME.HAS - Dobj.WEIGH;
        $move(Dobj, $loc($ME));
        "A strange glowing network of lights appears, and you can read:\n";
        If (Dobj.POINT) {
    	SCORE = SCORE + Dobj.POINT;
    	$move(Dobj, $ALL);
    	"\tYour account is now at $" $str(SCORE) ".\n"
    	"\tThank you for letting Arpa-Citizen's be your host.\n";
        }
        Else {
    	"\tYour deposit is worthless";
    	If ($pct(25)) {
    	    ", but thanks for the trinket!\n";
    	    $move(Dobj, $ALL);
    	}
    	Else {
    	    "!  Keep it!\n";
    	}
        }
        "The Arpa network mercifully disappears.\n";
    }

    town6(SDESC)  = Proc() {Return Sayer("Packet Inn", $arg(0));}
    town6(LDESC)  = Proc()
    {
        "You are at that famous old saloon, the Packet Inn.  Thousands "
        "of the local adventurers drank 'till they were totally zorked in "
        "this colorful old haunt.  A little wandering convinces you that "
        "nothing much is to be seen.\n";
    }

    /**** DUNGEON PROPER ****/
    cel01(LDESC) = Proc()
    {
        "You are in a secret cellar below the farmhouse.  In the "
        "corner of one wall is a strange insignia composed of red "
        "and green squares, joined at the corners.  Passages "
        "lead to north and west.  An old stairway leads up and out.\n";
        $move(insignia, cel01);
    }
    cel01(SDESC) = Proc()
    {
        $move(insignia, cel01);
        Return Sayer("Secret Cellar", $arg(0));
    }

    cel02(LDESC) = Proc()
    {
        "You are in a cool cave, once used for the storage of rare "
        "wines.  A cool breeze from the caves to the north keeps this cave "
        "at an even temperature the year round.  Exits can be seen "
        "to the north, south, and east.\n";
    }
    cel02(SDESC) = Proc() {Return Sayer("Cool Cave", $arg(0));}

    /* cel03 was moved to after cel08 */

    cel04(LDESC) = Proc()
    {
        "This is a small temple to Elbereth, Queen of the Stars.  The walls "
        "glow with a warm iridescence of their own.  They are covered "
        "with murals depicting the kindling of the stars at the Beginning of "
        "Days.  In the corner someone has added an insignia consisting of red "
        "and white squares joined at the corners.  Passages lead east and west, "
        "and a stairway to the north leads down into darkness.\n";
        $move(insignia, cel04);
    }
    cel04(SDESC) = Proc()
    {
        $move(insignia, cel04);
        Return Sayer("Temple", $arg(0));
    }
    cel04(LIGHT)=TRUE;

    cel05(LDESC) = Proc()
    {
        If (dragon.KILLED) {
    	"You are in a very wet cave.  Puddles of extremely cold water "
    	"are everywhere.";
        }
        Else {
    	"You are in an icy cave.  All the walls are covered with thick "
    	"layers of ice.";
    	$move(ice, cel05);
        }
        "  The cave continues north and south, and there is a side tunnel leading ";
        "to the northeast.\n";
    }
    cel05(SDESC) = Proc()
    {
        If (dragon.KILLED) {
    	Return Sayer("Wet Cave", $arg(0));
        }
        Else {
    	$move(ice, cel05);
    	Return Sayer("Ice Cave", $arg(0));
        }
    }

    cel06(LDESC) = Proc()
    {
        "You have reached a large cavern";
        If (!dragon.KILLED) {
    	" of ice.  You cannot see "
    	"the roof, but you are sure it is covered with icicles.\n";
    	$move(ice, cel06);
        }
        Else {
    	".  You cannot see the roof, and it looks like something has "
    	"melted, covering the floor with puddles.\n";
        }
        "There are exits east and southwest.\n";
    }
    cel06(SDESC) = Proc()
    {
        If (!dragon.KILLED) {
    	$move(ice, cel06);
        }
        Return Sayer("Great Cavern", $arg(0));
    }

    cel07(LDESC) = Proc()
    {
        "You are in a tiny side room where the ice dragon ";
        If (dragon.KILLED) "kept"; Else "keeps";
        " his single prize treasure.  You may leave through a western doorway.\n";
    }
    cel07(SDESC) = Proc() {Return Sayer("Treasure Room", $arg(0));}

    cel08(LDESC) = Proc()
    {
        "You are in an old abandoned room, once the resident of a frustrated "
        "artist.  A huge mural depicting ";
        If (dragon.KILLED)
    	"a gentle green field ";
        Else
    	"a barren wasteland ";
        "covers the west wall.  A dim glow comes from the corridor to the east. "
        "Vandals have apparently been here too, for on the painting is drawn "
        "a strange insignia consisting of red and blue squares, joined at "
        "the corners.\n";
        $move(insignia, cel08);
    }
    cel08(SDESC) = Proc()
    {
        $move(insignia, cel08);
        Return Sayer("Artist's Retreat", $arg(0));
    }

    cel03(LDESC) = Proc()
    {
        If (dragon.KILLED) {
    	"You are standing on the south bank of a turbulent underground "
    	"river.  The only way to go is back south.\n";
        }
        Else {
    	"You are standing on a frozen underground river.  The "
    	"source of the river seems to have been to the west, and "
    	"you can walk that way on the ice.  However, to the "
    	"northeast, the river forms a frozen waterfall you can "
    	"slide down.\n";
    	$move(ice, cel03);
        }
    }
    cel03(SDESC) = Proc()
    {
        If (dragon.KILLED) {
    	Return Sayer("Bank of Underground River", $arg(0));
        }
        Else {
    	$move(ice, cel03);
    	Return Sayer("Top of Frozen Fall", $arg(0));
        }
    }

    cel09(LDESC) = Proc()
    {
        "You are at the southern end of a dry river gorge.  The source "
        "of the river was once a waterfall to the south, but for some reason "
        "it seems frozen solid.  The riverbed continues north.  There is "
        "a large crack in the waterfall to the south.\n";
        $move(ice, cel09);
    }
    cel09(SDESC) = Proc()
    {
        $move(ice, cel09);
        Return Sayer("Southern Gorge", $arg(0));
    }

    cel10(LDESC) = Proc()
    {
        "You are in a dark cave.  The low-hanging stalactites and tall "
        "stalagmites cast eerily human-like shadows on the craggy walls. "
        "A roughly-hewn stairway to the south is lit by a dim illumination "
        "from above, while a slimy pit in the middle of the room leads "
        "down into even inkier blackness.";
        If (dragon.KILLED)
    	"  The pit is full of very cold water.";
        "\n";
    }
    cel10(SDESC) = Proc() {Return Sayer("Shadowy Cave", $arg(0));}

    cel11(LDESC) = Proc()
    {
        If	(See(<clear crystal>, $cont($loc($ME))) & <clear crystal>.LIGHT) {
    	"You are in an impossibly dark cave.  Only the light from your "
    	"magic crystal makes it possible to see, even dimly, here.  You "
    	"can make out a tunnel leading leading west, and another leading "
    	"east.  No other exits are visible.  A large pit lies in the "
    	"middle of the cave.\n";
        }
        Else {
    	"It's mighty dark in here!";
    	If (See(globe, $cont($loc($ME))) & globe.LIGHT) {
    	    "  Even your glowing globe is barely visible!";
    	}
    	"\n";
    	Dark = TRUE;
        }
    }

    cel11(SDESC) = Proc()
    {
        If (!(See(<clear crystal>, $cont($loc($ME))) & <clear crystal>.LIGHT)) {
            Dark = TRUE;
        }
        Return Sayer("DARK Cave", $arg(0));
    }

    cel12(LDESC) = Proc()
    {
        "You are in a small chamber which is not quite as dark as the DARK "
        "cave to the west.  There are no other exits.\n";
    }
    cel12(SDESC) = Proc() {Return Sayer("Small Chamber", $arg(0));}

    VAR
        BSaid;

    cel13(LDESC) = Proc()
    {
        "You are on a large underground lake of ice, thick enough "
        "to walk on.  To the west you can dimly make out a cavern "
        "entrance; to the east is an icy river you can walk on.  ";
        If (cel13.HOLED) {
            "In the middle of the lake is a hole; icy water sloshes about "
            "two feet below the ice.";
        }
        "\n";
        BSaid = FALSE;
        $move(ice, cel13);
    }
    cel13(SDESC) = Proc()
    {
        BSaid = FALSE;
        $move(ice, cel13);
        Return Sayer("Icy Lake", $arg(0));
    }

    BDesc = Proc()
    {
        If (wetsuit.WORN) {
    	"Luckily, your wetsuit enables you to breathe down here.\n";
        }
        Else If (!BSaid) {
    	"You can't hold your breath for long...\n";
    	BSaid = TRUE;
        }
    }

    cel14(LDESC) = Proc()
    {
        "You are under the ice of a frozen lake.  You can barely make out exits "
        "to the east and west.  ";
        If (cel13.HOLED) {
    	"There is a hole in the ice above you.\n";
        }
        Else {
    	"A diffuse light comes through the ice above.\n";
        }
        BDesc();
        $move(ice, cel14);
    }
    cel14(SDESC) = Proc()
    {
        $move(ice, cel14);
        Return Sayer("Underwater", $arg(0));
    }

    cel15(LDESC) = Proc()
    {
        "You are on a sandy beach in a small ice cave.  A small pool of water "
        "comes up to the beach from the east, and a quick survey of the place "
        "shows that it is completely covered by the stony roof.  You can walk up "
        "to the back of the cave to the south, but the pool seems to be the only "
        "other exit.\n";
        BSaid = FALSE;
    }
    cel15(SDESC) = Proc()
    {
        BSaid = FALSE;
        Return Sayer("Sandy Beach", $arg(0));
    }

    cel16(LDESC) = Proc()
    {
        "You are at the back of a small ice cave.  A sandy shore slopes down "
        "to a blue pool of water to the north.  To the east is a small crawlway "
        "leading into inky blackness.\n";
    }
    cel16(SDESC) = Proc() {Return Sayer("Back of Cave", $arg(0));}

    cel17(LDESC) = Proc()
    {
        "You are in a stream under a ceiling of ice.  The stream "
        "leads northeast, and to the west you can see more light.\n";
        BDesc();
        $move(ice, cel17);
    }
    cel17(SDESC) = Proc()
    {
        $move(ice, cel17);
        Return Sayer("In Stream", $arg(0));
    }

    cel18(LDESC) = Proc()
    {
        "You are in a hollow spot behind a frozen waterfall to the north. "
        "Above you, a ceiling of ice gradually lowers to meet a dark "
        "body of water to the southwest.  There is a large crack in the "
        "waterfall.\n";
        $move(ice, cel18);
        BSaid = FALSE;
    }
    cel18(SDESC) = Proc()
    {
        BSaid = FALSE;
        $move(ice, cel18);
        Return Sayer("Hollow Spot", $arg(0));
    }

    cel19(LDESC) = Proc()
    {
        "You are at the source of a frozen stream which flows out of the "
        "rock to the west.  The stream continues to the east.\n";
        $move(ice, cel19);
    }
    cel19(SDESC) = Proc()
    {
        $move(ice, cel19);
        Return Sayer("Source of Frozen Stream", $arg(0));
    }

    cel20(LDESC) = Proc()
    {
        "You are in what was once a study.  The furniture has "
        "been smashed to splinters, and none of the papers or "
        "books remain intact.  The only exit is to the west.\n";
    }
    cel20(SDESC) = Proc() {Return Sayer("Study", $arg(0));}

    cel21(LDESC) = Proc()
    {
        If (RiverLoc == GRATELOC) {
            "You have reached a point where a bridge crosses the dry river bed. "
            "The river bed is blocked by a large iron grate to the south.\n";
        }
        Else If (RiverLoc == BEND1LOC) {
            "You are at a sharp bend where the dry river bed coming from the "
            "south turns to the west.\n";
        }
        Else If ((RiverLoc > BEND1LOC) & (RiverLoc <BEND2LOC)) {
    	"You are in a dry river bed that runs east-west.\n";
        }
        Else If (RiverLoc == BEND2LOC) {
            "You are at a sharp bend where the dry river bed coming from "
            "the east turns to the south.\n";
        }
        Else {
    	"You are in a dry river bed that runs north-south.\n";
        }
    }
    cel21(SDESC) = Proc()
    {
        If (RiverLoc == GRATELOC) {
    	Return Sayer("Under Bridge", $arg(0));
        }
        Else If ((RiverLoc == BEND1LOC) | (RiverLoc == BEND2LOC)) {
    	Return Sayer("Bend in River", $arg(0));
        }
        Else {
    	Return Sayer("Dry River Bed", $arg(0));
        }
    }

    desert(LDESC) = Proc()
    {
        "You are lost in the middle of a vast desert.  The terrain "
        "is the same, no matter which way you look.  The heat "
        "is tremendous, and you have no water.  In other words, "
        "you're in trouble!\n";
    }
    desert(SDESC) = Proc() {Return Sayer("Desert", $arg(0));}

    field(LDESC) = Proc()
    {
        "You are in the middle of a grassy field.  Above you is a beautiful "
        "blue sky in which fleecy white clouds make pretty shapes.  The sound "
        "of birds fills the air.  A path leads north to a large building built "
        "of white marble, with hundreds of columns and sculptures about.\n";
    }
    field(SDESC) = Proc() {Return Sayer("Grassy Field", $arg(0));}

    ENDGAME = Proc()
    {
        "As you approach the building, a robed figure emerges from the door of "
        "the building.  He looks at you and says, \"I am the former owner of the "
        "farm and of the cellar below.  You have shown great merit in your "
        "struggle to solve my puzzles.  ";
        If ($cont($ME)) {
            "However, you must shun all things wordly before you "
            "can enter here.  Return to your world and come back when you have "
            "attained this.\"\n";
        }
        Else If (SCORE < PMAX) {
            "Unfortunately, you have failed to return all misplaced "
            "treasures to their proper location.  Consider this:  a penny saved "
            "is a penny earned!\"\n";
        }
        Else {
            "You have also wisely shed yourself "
            "of damaging worldly affectations, and have honorably satisfied your "
            "obligations.  Come and join our circle of philosophers!\" "
            "\n\tThe robed figure escorts you into the building.  You have "
            "finished the game!\n";
    	$spec(QUIT);
        }
        "The robed figure waves his arms, and you are transported to...\n";
        $move($ME, road1);
        GO = TRUE;
    }