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;
}