!*******************************************************************************
!** The Awakening - Copyright (c) 1998 by Dennis Matheson
!**
!** Distribution: ~The Awakening~ may be distributed freely by any means
!** so long as a) This notice remains intact and b) no charge other than a nominal
!** fee to cover the cost of distribution is made. It may be included as part of
!** a commercial distribution provided that my permission is given first.
!**
!** Derivative Works: ~The Awakening~ is distributed with its source code.
!** Derivative works are permitted of ~The Awakening~ so long as a) They are clearly
!** identified as such and reference is made back to this original version and b)
!** such works must freely redistributable under the same terms as stated above.
!**
!** Support: ~The Awakening~ is distributed without any support of any
!** kind. Feel free to contact me at the address given, but I make no guarantee that
!** I will respond.
!**
!** Warranty: ~The Awakening~ is distributed totally without any warranty of any
!** kind. The entire risk of using this program is totally assumed by the user.
!**
!** As of July 1998
!** Dennis Matheson
!**
[email protected]
!**
!** 4068 Maxanne Dr.
!** Kennesaw, GA 30144
!*******************************************************************************
Constant Story "The Awakening";
Constant Headline "^Copyright (c) 1998 by Dennis Matheson^
(For more information type ~HELP~, for hints type ~HINTS~)^^";
Constant DEATH_MENTION_UNDO;
Constant TASKS_PROVIDED;
Global hint_menu = Hint_Top;
Global help_menu = Help_Top;
Replace DoMenu;
Replace LowKey_Menu;
Include "Parser";
Constant NUMBER_TASKS = 7;
Array task_scores -> 10 5 5 5 10 5 10;
Constant MAX_SCORE = 50;
Object LibraryMessages
with before [;
Miscellany:
if (lm_n == 19)
"You find you cannot look down at yourself. It is almost as if you
know what you might find and are afraid to have your fears
confirmed.";];
Include "VerbLib";
Include "Center";
Include "DoMenu";
Include "AltMenu";
Include "Hints";
!*******************************************************************************
!*** Class Descriptions
!*******************************************************************************
Class Fake_Object
has static;
Class Bottle
with
color "colorless",
name
"heavy" "glass" "bottle" "lead" "leaded" "stopper" "stoppered" "cork",
description [;
"The bottle is made of a heavy, leaded glass and closed with a cork
stopper sealed with wax. Inside the bottle, an oddly shaped lead weight
hangs like a pendulum from a string. The bottle glows with a ",
(string) self.color, " light.";],
before [;
Take:
move self to player;
if (self hasnt general) {
move Bottles to Limbo;
give Blue_Bottle ~concealed;
give Green_Bottle ~concealed;}
if (self == Blue_Bottle) {
if (self hasnt general) {
give self general;
"The blue bottle is warm to your touch as you pick it up. The
warmth seems to travel up your arm and into the center of your
being. It is almost as if you have found a missing part of
yourself.";}
else
"You savor the warmth of the blue bottle as you pick it up.";}
else {
if (self hasnt general) {
give self general;
"The green bottle has a sickly feel which matches its color. It
feels like ice, cold and burning at the same time. It is all you
can do to keep from throwing it down."; }
else
"You gingerly pick up the green bottle again.";}
ThrownAt:
move noun to location;
print (The) noun, " shatters ", (the) self, ". ";
self.open_bottle();
rtrue;
Open:
print "You peel the wax away from the mouth of the bottle and pull out
the cork. ";
self.open_bottle();
rtrue;
Attack:
print "You shatter ", (the) self, ". ";
self.open_bottle();
rtrue;],
has light;
!*******************************************************************************
!*** Hidden Game Locations and Things That Don't Start Anywhere
!*******************************************************************************
Object Limbo "Limbo";
!*******************************************************************************
!*** The start
!*******************************************************************************
Object Grave "In the Mud"
with description
"Rain and muddy water are pouring down on you, making it difficult to
see or even breathe. Sodden earth and mud surrounds you on all sides
except overhead, where flashes of lightning illuminate a storm tossed
sky.",
before [;
Listen:
"Howling winds and the crashing of thunder assault your senses.";],
u_to [;print "As you scramble out of the hole the mud collapses downward,
filling in the hole behind you.^"; return Graveyard;],
cant_go "You claw helplessly at the mud.",
has light;
Object Muddy_Water "muddy water" Grave
with name
"muddy" "water",
description
"Torrents of muddy water are pouring in from the opening overhead onto
you.",
before [;
Take:
"The muddy water trickles through your fingers.";],
has scenery;
Object Mud "mud" Grave
with name
"mud" "earth" "sodden",
description
"The sides of the hole are made of dark, rich earth, now soaked through
by the torrential downpour. As you watch, more and more mud is washed
away and into the hole with you.",
before [;
Take:
"You take a handful of muddy soil, but the rain washes it away.";],
has scenery;
!*******************************************************************************
!*** The outside
!*******************************************************************************
Class Outside
with
before [;
Smell:
"You would expect the storm to have cleared the air, but over the whole
area hangs a fetid odor of decay.";],
u_to "It is not yet that time...",
d_to "That is no longer your place.",
cant_go "You feel that you are unable to. Some force on you increases
as you try to leave the area.",
each_turn [;
if (random(5) == 1) {
switch (random(5)) {
1: "^A blast of thunder rattles the ground.";
2: "^With a loud CRACK, a bolt of lightning strikes the steeple of
the church.";
3: "^Momentarily, the wind and rain slacken then return with renewed
force.";
4: "^Lightning arcs overhead, followed instantly by a blast of
thunder.";
5: "^For a brief moment, hail pounds against you then subsides.";}}],
has light;
Outside Graveyard "Graveyard"
with description
"Dozens of stone markers stand here, oblivious to the wind and the rain.
Huge, twisted oaks, their limbs tossed by the wind, draw an unmentionable
sustenance from the moss-covered, moldy ground. An odor of decay, which
even the storm cannot dissipate, hangs over everything. An iron barred
fence surrounds the graveyard, an ivy-covered barrier separating it from
the world of the living. The only exit is through the gate to the east.",
before [;
Smell:
"You smell the odors of wet earth, the wild scent of the storm, and,
under it all, the lingering charnel odor of decay.";],
e_to West_Church,
cant_go "The graveyard is surrounded on all sides by an iron-barred fence.
The only exit is through the gate to the east.";
Object Graves "stone markers" Graveyard
with name
"stone" "markers" "graves" "slabs" "graveyard",
description
"Dozens of stone slabs mark the final resting places of those who have
departed. All are old, the inscriptions worn away and covered with moss
and mold, they tilt at odd angles. Many have fallen and are now half
buried in the mud.",
before [;
Read:
"Few of the inscriptions are legible. Those that remain contain only
those sentiments that are placed there for the benefit of those who
gaze upon the stones, not those buried beneath them.";
Push, Pull:
"The stone topples over into the mud.";
Take:
"You strain and lift the stone slightly from the mud, then it slips and
falls over with a splash.";],
has static scenery pluralname;
Object Branch "oak branch" Graveyard
with name
"oak" "branch",
description [;
print "This large branch has broken off from one of the trees and fallen
on one of the graves, shattering it's marker.";
if ((Limb hasnt moved) && (self has general))
" A smaller limb has broken off of the branch and is lying nearby.";
else
new_line;rtrue;],
describe [;
print "^A large branch has been broken from one of the trees and has
crushed the grave marker below it.";
if ((Limb hasnt moved) && (self has general)) {
" A smaller limb has broken off of the branch and is lying nearby.";}
else
new_line;rtrue;],
before [;
Take:
if (Limb hasnt moved) {
give self general;
"The branch is too large to move, but a smaller limb has broken off
and is lying nearby."; }
else
"The branch is too large to take.";
Push, Pull:
"You shove the branch around, to no real effect.";],
has static;
Object Limb "broken limb" Graveyard
with name
"broken" "limb",
description
"A stout oak limb, about as long as you are tall.",
before [;
Take:
give self ~concealed;],
has concealed;
Object Disturbed_Grave "disturbed grave" Graveyard
with name
"broken" "shattered" "marker" "grave",
description
"The marker for this grave has been shattered by the fall of a large
branch from the overhanging tree. The grave itself has been disturbed;
the soil has fallen in to form a shallow pit.",
before [;
Take:
"There is no need to collect the shattered remains of the marker.";
Read:
"The inscription is no longer legible.";],
has scenery;
Object Moss_Mold "moss and mold" Graveyard
with name
"moss" "mold" "mould",
description
"Mosses and molds cover the ground and the grave markers. There is
something sickly looking about them, as if they are the physical
manifestations of some kind of poisons in the soil. At any rate, they
are alone in the graveyard, as no grasses or weeds grow within its
boundaries.",
before [;
Take:
"You pull up a handful and examine it briefly before tossing it
back down. You see no use in carrying it with you.";
Burn:
"The moss and mold is far too wet to burn.";],
has scenery;
Outside West_Church "West Side of the Church"
with description
"This side of the church is untended and grasses and weeds have run
rampant. A muddy trail leads back to the graveyard to the west and on to
the southeast and a faint path continues around the church to the
northeast.",
w_to Graveyard,
e_to "There is no entrance into the church on this side.",
ne_to North_Church,
n_to North_Church,
se_to Front_Church,
s_to Front_Church;
Object Trail "muddy trail" West_Church
with name
"muddy" "trail" "faint" "path",
description
"Simply a worn trail through the grass, it leads around the church
to the northeast and southeast and west to the graveyard.",
has scenery;
Outside North_Church "North Side of the Church"
with description
"The trees close in here, their storm-tossed branches seeming to reach
clawing limbs towards the back of the church. The weeds have run wild
here and ivy climbs its way up the back of the building. A faint path
continues around the church to the southeast and the southwest.",
se_to East_Church,
e_to East_Church,
sw_to West_Church,
w_to West_Church,
s_to "There is no entrance into the church on this side.";
Object Path "faint path" North_Church
with name
"faint" "path" "trail",
description
"A barely visible rut in the grass leads around the church to the
southeast and southwest.",
has scenery;
Outside East_Church "East Side of the Church"
with description
"This wide, graveled clearing may have once been where the worshippers at
the church left their vehicles while attending services inside. If so, it
seems that the last service was held long ago. Weeds and grasses grow up
through the gravel, which is littered with debris. Dark, looming trees
surround the clearing except for the driveway, which leads to the
southwest, and for a narrow opening to the northwest.",
sw_to Front_Church,
s_to Front_Church,
nw_to North_Church,
n_to North_Church,
w_to "There is no entrance into the church on this side.";
Object Parking_Lot "graveled clearing" East_Church
with name
"gravel" "graveled" "clearing" "parking" "lot",
description
"Dirty chunks of rock mix with mud to create a more or less level
surface.",
before [;
Take:
if (Gravel notin player) {
move Gravel to player;
"You pick up a handful of gravel.";}
else
"You already have a handful of gravel.";
Dig:
"You dig a small hole in the gravel which the storm immediately
fills in with rain and mud.";],
has scenery;
Object Gravel "handful of gravel" Limbo
with name
"handful" "of" "gravel",
description
"A handful of loose, muddy gravel.",
before [;
Drop:
move self to Limbo;
if (location ofclass Outside)
"You toss down the gravel which scatters across the ground.";
else
"You toss down the gravel which scatters among the debris on the
floor.";],
after [;
ThrowAt:
move self to Limbo;
"The gravel scatters across the ground and is lost.";];
Object Lot_Debris "debris" East_Church
with name
"debris" "sticks" "leaves" "trash",
description
"Scattered sticks, leaves and bits of trash cover the gravel clearing.",
before [;
Take:
"You see no need to carry the trash around with you.";],
has scenery pluralname;
Outside Front_Church "Front of the Church"
with description
"Two massive oak trees which flank the cracked sidewalk dominate the front
of the church. The facade of the church itself rises beyond them, its
steeple silhouetted against the sky. The storm lashes at its faded white
facade, almost as if the storm is trying to wash the church clean;
something you somehow realize will take more than mere water to accomplish.
To the north, a sidewalk leads to the front of the church. A weed-choked
driveway runs to the northeast and down a hill to the south, and a muddy
path leads around the church to the northwest.",
e_to East_Church,
ne_to East_Church,
w_to West_Church,
nw_to West_Church,
n_to [;if (Dog hasnt general)
"Bristling and growling, the dog blocks your path";
else {
Achieved(0);
return Porch;}],
u_to [;if (Railing_Section.is_under ~= Top_Of_Tree)
"The tree trunks are too slick with rain to climb.";
else
return Railing_Section;];
Object Oak_Trees "oak trees" Front_Church
with name
"massive" "oak" "trees" "tree",
description
"These massive trees are easily hundreds of years old. They tower over
the front of the church, climbing almost as high as the steeple. Unlike
the forest surrounding other parts of the grounds they are almost
unnaturally healthy, their branches clean and straight and their leaves
a deep rich green.",
before [;
Climb:
if (Railing_Section.is_under == Top_Of_Tree)
<<Go Railing_Section>>;
else
"The trunk is too rain-slick to climb.";],
has pluralname static scenery;
Object Dog "guard dog" Front_Church
with
is_mad false,
is_following false,
temper 0,
chain_length 0,
name
"guard" "dog" "fido" "rover",
description [;
if (self.is_mad)
"The dog is slavering and barking wildly as it throws itself at you
again and again.";
else
"This large, solid black dog is chained to one of the oak trees. There
is something disturbing about the shape of it's head; it seems to be
too large and slightly misshapen and an unnatural intelligence can
be seen behind its red eyes.";],
describe
"A formidable looking guard dog stands here.",
orders [;
"The dog growls threateningly.";],
before [;
Touch:
"^The dog snarls and snaps at you as you reach for it and you draw
your hand back hurriedly.";],
life [;
Attack:
self.is_mad = true;
"^Angered at your attack, the dog charges at you!";
ThrownAt:
move noun to location;
<<Attack self>>;
default:
"The dog snarls and barks at you.";],
daemon [d p x;
d = parent(self);
p = location;
if (p == d) {
give self ~general;
self.is_following = true;
if (self.is_mad) {
switch(self.temper++) {
0: "^The dog growls and snarls angrily, snapping at your legs.";
1: "^The dog leaps at you, raking your chest with its claws and
leaving a trail of red.";
2: "^You feel a flash of searing pain as the dog latches onto
your side with its teeth.";
3: deadflag = 1;
"^The dog finally manages to latch onto your throat. Your
last sight is of your blood splattering onto its face.";}}
"^The dog growls at you threateningly.";}
else {
if (self.temper > 0) self.temper--;
if (self.is_following) {
if ((self.is_mad) ||
(p == Front_Church or East_Church or West_Church)) {
switch(d) {
Front_Church:
if (p == West_Church) x = 1;
if (p == East_Church) x = -1;
West_Church:
if (p == North_Church) x = 1;
if (p == Front_Church) x = -1;
North_Church:
if (p == East_Church) x = 1;
if (p == West_Church) x = -1;
East_Church:
if (p == Front_Church) x = 1;
if (p == North_Church) x = -1;
default:
x = 0;}
self.chain_length = self.chain_length + x;
if ((self.chain_length > -4) && (self.chain_length < 4)) {
move self to p;
if (self.is_mad)
"^The dog chases madly after you!";
"^Growling faintly, the dog follows you to ", (the) p,
", dragging its chain behind it.";}
else {
if (self hasnt general) {
give self general;
self.is_following = false;
self.chain_length = self.chain_length - x;
"^The dog lunges after you, but is suddenly jerked to
a stop with a yelp. The dog has been brought up short
by it's chain, which is now completely wrapped around
the church. It barks wildly but ineffectually at you
as you continue on around the corner.";}}}
else {
self.is_following = false;
move self to Front_Church;
self.chain_length = 0;
"^Satisfied, the dog wanders off back to the Front of the
Church.";}}}
rtrue;],
has male animate;
Fake_Object Chain "chain"
with name
"chain",
description
"A heavy steel chain. It has rusted slightly but is still more than
sturdy enough to hold the dog.",
describe [;
if (Dog has general) {
switch (location) {
Front_Church:
if (Dog notin location) {
print "^The heavy chain stretches from one of the oak trees and around
the corner of the church to the ";
if (Dog.chain_length > 0) "northwest."; "northeast.";}
East_Church:
if (Dog notin location)
"^A heavy chain stretches around the church to the northwest
and southwest.";
West_Church:
if (Dog notin location)
"^A heavy chain is wrapped around the church, disappearing to
the northeast and southeast.";
North_Church:
"^A heavy chain disappears around the east and west corners.";}}
rtrue;],
before [;
Take, Pull:
"The dog probably wouldn't like you to be pulling on its chain.";],
found_in Front_Church East_Church West_Church North_Church,
has static;
Outside Top_Of_Tree "Top of Oak Tree"
with description
"The limbs of the tree are swaying violently from the storm, but near the
trunk it is a little more stable. You have an excellent view from here
of the church grounds and surrounding area. The church seems to be in
a clearing on a hill surrounded by a forest. At the base of the hill a
small town can be seen, its lights glimmering faintly through the storm.
^^One of the branches of the tree reaches out to the north towards the
steeple of the church. An open frame can be seen in the steeple near
where the branch ends.",
before [;
Jump:
deadflag = 1;
"Throwing caution to the winds, you leap out of the tree and into
space. The wind howls around you as you plummet to the ground. Your
last sight is the church steeple, silhouetted by the lightning against
the sky.";
Climb:
if (noun == Railing_Top) rfalse;
if (noun == Tree_Branch) rfalse;
if (Railing_Top.is_over ~= Front_Church)
"You cannot climb any further up and the trunk of the tree is
too slick to climb down.";
else
<<Climb Railing_Top>>;
Drop:
move noun to Front_Church;
print_ret (The) noun, " tumbles through the branches to the
ground.";],
n_to Belfry,
d_to [;if (Railing_Top.is_over ~= Front_Church)
"The drop to the ground below is too far for you to jump safely,
and the trunk of the tree is too slick to climb.";
else
return Front_Church;];
Object Tree_Branch "tree branch"
with name
"oak" "tree" "branch",
description
"The tree branch sways alarmingly in the wind but seems quite sturdy. It
passes very close to the open window frame in the steeple.",
before [;
Take:
"The branch is securely attached to the tree.";
Climb:
PlayerTo(Belfry,2);],
found_in Top_Of_Tree Belfry,
has scenery;
Object Sidewalk "sidewalk" Front_Church
with name
"walk" "sidewalk" "path" "flagstone" "flagstones",
description
"A wide flagstone path leads between the two oak trees to the front of
the church. The earth has shifted, causing the stones to tilt at odd
angles, and weeds and grass grow in the cracks between the flagstones.",
before [;
Take:
"You attempt to lift one of the flagstones, but it slips and falls
back with a squishing splash.";],
has scenery;
Object Driveway "driveway"
with name
"drive" "driveway",
description
"A rutted, gravel covered path.",
found_in East_Church Front_Church,
has scenery;
Object Ivy "ivy"
with name
"ivy" "vine" "creepers",
description [;
if (location == Graveyard)
"The ivy is thick and luxuriant and somehow disturbing. The shapes
of the leaves are not quite wholesome and you wonder what strange
sustenance it is drawing from beneath the moldering ground.";
else
"The ivy is sick and yellowed looking but somehow clings to the side
of the church as if it is trying to distance itself from the rocky
soil.";],
before [;
Climb:
"The rain-soaked vines tear loose in your hands, covering you with
wet leaves and sticky sap.";
Take:
"The vines pull away easily enough, but maintain a tenacious hold on
the ground that you are unable to break.";
Burn:
"The vines are too wet to burn.";],
found_in Graveyard North_Church,
has scenery;
Object Forest "oak trees"
with name
"oak" "oaks" "tree" "trees" "forest" "limbs" "twisted" "ancient",
description [;
if (location == Graveyard)
"These ancient, twisted trees surround and even invade the graveyard.
Now tossed wildly by the storm, their branches reach skyward while
their roots suck unholy nourishment from between the broken slabs.";
else
"The trees wave wildly in the wind, their twisted limbs seeming to
reach out to claw at the side of the church. No birds or forest
animals inhabit their branches; a repellent air surrounds them that
seems inimical to any such invasion.";],
before [;
Climb:
"The trunk is too wet and rain-slick to do that safely.";],
found_in Graveyard North_Church East_Church Top_Of_Tree Belfry,
has scenery pluralname;
Object Outside_Storm "storm"
with name
"storm" "clouds" "sky" "wind" "thunder" "lightning",
description
"The howling wind sends the clouds racing across the sky. The almost
constant flashing of lightning illuminates the landscape in stark black
and white contrast, while the barrage of thunder joins with the wind in
a mad concaphony.",
before [;
Take:
"You can't take the wind!";],
found_in [; if ((location ofclass Outside) || (location == Grave) ||
(location == Belfry)) rtrue;],
has scenery;
Object Rain "rain"
with name
"rain",
description
"The rain pours downward, pelting you painfully and almost blinding you
with its intensity.",
before [;
Take:
"You are already soaked.";],
found_in [; if ((location ofclass Outside) || (location == Grave)) rtrue;],
has scenery;
Object Muddy_Ground "mud"
with name
"mud" "muddy" "earth" "sodden" "ground",
description
"A thin layer of mud covers the rocky soil.",
before [;
Take:
"You take a handful of muddy soil, but the rain washes it away.";
Dig:
"You are only able to dig a few inches before striking rock, and the
rain rapidly washes more mud in to fill up the hole you make.";],
found_in [; if (location ofclass Outside) rtrue;],
has scenery;
Object Grass_Weed "grasses and weeds"
with name
"grass" "grasses" "weed" "weeds",
description
"Diseased looking grasses and weeds surround the church. In clumps it
rises to your knees, while in other places it has been beaten to the
ground by the force of the storm.",
before [;
Take:
"You pull up a handful and examine it briefly before tossing it
back down. You see no use in carrying it with you.";
Burn:
"The grass and weeds are far too wet to burn.";],
found_in [; if ((location ofclass Outside) && (location ~= Graveyard))
rtrue;],
has scenery;
Fake_Object Church "church"
with name
"church" "building",
description
"The old church has seen better days. Formerly painted white, the boards
are now faded, peeling and rotted. Most of the windows are boarded up,
and those that aren't have long since been broken out. The shingles have
fallen from the roof, which sags alarmingly. A broken-tipped steeple rises
from one end of the building, and a faint miasma of decay seems to rise
from the structure.",
describe [;
switch (location) {
Graveyard:
"^A church rises to the east, its boarded up windows giving the
impression that it is covering its eyes from the sight of the
graveyard.";
West_Church:
"^To the east, the wall of the church breaks some of the force of
the wind.";
North_Church:
"^The south wall of the church looms blankly overhead.";
East_Church:
"^To the west, the church stares out over the clearing.";
Front_Church:
"^The church and steeple loom to the north, the open window frames
seeming to stare with judgment upon anyone standing before it.";
Top_Of_Tree:
"^The steeple of the church looms to the north.";}],
found_in [; if ((location ofclass Outside) && (location ~= Porch)) rtrue;],
has static;
Object Steeple "steeple"
with name
"steeple",
description
"Pointing heavenward like some broken, accusing finger, the steeple rises
from the front of the church. The steeple ends in a ragged, blunt tip;
whatever decoration may have once surmounted it is long gone.",
found_in [;if (location ofclass Outside) rtrue;],
has scenery;
Object Windows "windows"
with name
"stained" "glass" "broken" "window" "windows" "board" "boards" "frame",
description
"Once, the windows were probably told stories of hope and redemption
in brightly colored stained glass. Now, they are boarded up as if the
church has closed it's eyes to the world outside.",
before [;
Take, Push, Pull, Open, Close:
"The boards are nailed firmly in place.";],
found_in [;if (location ofclass Outside) rtrue;],
has scenery pluralname;
!*******************************************************************************
!*** The Porch
!*******************************************************************************
Outside Porch "Church Porch"
with name
"wide" "covered" "porch",
description
"This wide, covered porch spans the width of the church front. A white
picket railing surrounds the porch on three sides, except to the south
where a short flight of steps leads down to the sidewalk. Two large
windows have been boarded up but the main doors stand slightly ajar.",
n_to Vestibule,
s_to Front_Church,
d_to "The floor here is old, but still pretty solid.",
u_to "The railing is too rickety to climb.",
cant_go "There is no way off the porch in that direction.";
Object Railing "white picket railing" Porch
with name
"white" "picket" "railing" "rail",
description [;
print "The railing consists of two parallel lengths of wood about an
arm's span apart connected by wooden pickets. ";
if (self hasnt general)
"One section of the railing seems fairly unsteady.";
else
"One section of the railing is missing.";],
before [;
Take, Push, Pull:
if (self hasnt general) {
give self general;
if (action == ##Take)
move Railing_Section to player;
else
move Railing_Section to location;
"With a jerk, you tear free the loose section of railing.";}
else
"The rest of the railing seems fairly steady.";],
has static scenery;
Object Railing_Section "broken length of railing" Limbo
with
is_under 0,
name
"broken" "section" "of" "white" "picket" "railing" "ladder" "rail",
description
"The railing consists of two parallel lengths of wood about an arm's span
apart connected by wooden pickets. If stood on end, the rail would be
about twice your height.",
describe [;
switch (self.is_under) {
Steeple_Chamber:
"^The broken length of railing is propped up under the trap door";
Top_Of_Tree:
"^The broken length of railing is propped up against the side of the
oak tree.";
Near_Painting:
"^The broken length of railing is propped against the wall near the
painting.";
default:
"The broken length of porch railing is lying here.";}],
before [;
PutUnder:
if (self notin player)
"You don't have ", (the) self, ".";
move self to location;
if ((location == Vestibule) && (second == Trap_Door)) {
give self door;
self.is_under = Steeple_Chamber;
move Railing_Top to Steeple_Chamber;
Railing_Top.is_over = Vestibule;
"You carefully place the length of railing under the trap door in
the ceiling.";}
if ((location == Front_Church) && (second == Oak_Trees)) {
give self door;
self.is_under = Top_Of_Tree;
move Railing_Top to Top_Of_Tree;
Railing_Top.is_over = Front_Church;
"You lean the length of railing against the side of the oak tree.";}
if ((location == Sanctuary) && (second == Painting)) {
give self door;
self.is_under = Near_Painting;
move Railing_Top to Near_Painting;
Railing_Top.is_over = Sanctuary;
"You lean the length of railing against the wall near the
painting.";}
"You put ", (the) self, " under ", (the) second, ".";
Take:
give self ~door;
self.is_under = 0;
move Railing_Top to Limbo;
Railing_Top.is_over = 0;
Climb:
if (self.is_under ~= 0) {
print "You carefully climb up the length of railing, using the
pickets like a ladder.^";
<<Go self>>;}
else
"The railing doesn't lead anywhere.";],
door_dir u_to,
door_to [;
if (self.is_under ~= 0) {
if (self.is_under == Steeple_Chamber) Achieved(1);
return self.is_under;}
"The railing doesn't lead anywhere.";],
has open;
Object Railing_Top "top of railing" Limbo
with
is_over 0,
name
"top" "broken" "section" "of" "white" "picket" "railing" "ladder" "rail",
description
"The railing consists of two parallel lengths of wood about an arm's span
apart connected by wooden pickets. If stood on end, the rail would be
about twice your height.",
describe [;
switch (self.is_over) {
Vestibule:
"^The top of the broken section of railing is visible sticking up
through the trap door in the floor.";
Front_Church:
"^The broken length of railing is propped up against a nearby
branch.";
Sanctuary:
"^You are precariously balanced on the top of the broken section of
railing.";
default:
"You are standing on a bug!";}],
before [;
Take:
"You attempt to pull the railing up after you, but you cannot get
enough leverage to do so.";
Climb:
<<Go self>>;],
door_dir d_to,
door_to [; return self.is_over;],
has open door;
!*******************************************************************************
!*** The inside
!*******************************************************************************
Class Inside
with
u_to "It is not yet that time...",
d_to "That is no longer your place.",
cant_go "There is no passage in that direction.",
each_turn [;
if (random(5) == 1) {
switch (random(5)) {
1: "^A blast of thunder rattles the building.";
2: "^You hear a loud crash and see a flash of light through the
cracks in the boards covering the windows.";
3: "^The building shudders under a sudden gust of wind.";
4: "^A flash of lightning can be seen through the cracks between
the boards, followed by a sudden blast of thunder.";
5: "^There is a brief rattle of hail on the roof.";}}],
has light;
Inside Vestibule "Vestibule"
with description
"This small room is the entryway for the church. The years of neglect
are obvious; the floorboards are rotten and warped and what were probably
once stained glass windows are shattered and boarded up. Dirt and debris
covers the floor. A set of double doors leads south back to the outside
while a large archway leads north into the sanctuary. Overhead, there is
an open trap door in the ceiling at about twice your height.",
n_to Sanctuary,
s_to Porch,
u_to [;if (Railing_Section.is_under ~= Steeple_Chamber)
"The opening in the ceiling is too far up for you to reach.";
else
return Railing_Section;];
Object Trap_Door "trap door" Vestibule
with name
"trap" "door" "hole" "ceiling" "opening",
description
"The opening in the ceiling seems to lead to another room overhead, but
there doesn't seem to be any way to get to it.",
has scenery;
Inside Sanctuary "Sanctuary"
with description
"Once the heart of the church this room is now cold, dark and empty.
Debris is scattered among the sagging pews and only shards of broken
glass remain of the stained glass windows. Most of the interior
fixtures have been removed, but a large portrait of Christ stares down
at you from above the archway to the south. The pulpit still stands to
the north.",
before [;
Pray:
"You pray, with no result. You sense somehow that your prayers are not
so much being unheard as they are ignored.";],
n_to Pulpit,
s_to Vestibule,
u_to [;if (Railing_Section.is_under == Near_Painting)
return Railing_Section;];
Fake_Object Distant_Pulpit "pulpit"
with name
"pulpit" "podium",
description
"A simple raised platform at the front of the church, it supports a simple
wooden podium.",
found_in Sanctuary Near_Painting,
has static scenery;
Object Pews "pews" Sanctuary
with name
"sagging" "pews" "seats",
description
"Once, these rows would have been filled with worshippers. Now, they
only contain dust and debris.",
after [;
Enter:
"You sit in the pew. For a moment, the storm seems to retreat and
you are blessed with a brief moment of peace.";],
has static scenery enterable open transparent pluralname;
Inside Near_Painting "Near Painting"
with description
"You are standing on top of the railing section near the large painting
of Christ. From this location, you notice that the eyes in the painting
are cut out and there are holes behind them.",
before [;
Drop:
move noun to Sanctuary;
print_ret (The) noun, " falls to the floor below.";],
d_to Railing_Top,
cant_go "~Down~ is really your only option.";
Object Eyes "eyes of painting" Near_Painting
with name
"eye" "eyes" "hole" "holes",
description
"The eyes of the painting are cutouts. There are holes and an open space
behind the eyes.",
before [;
Search:
if (Curtain has general)
"You are looking into the small room in the steeple. You can see
past a faded purple curtain to a small table which is holding
two heavy glass bottles.";
else
"You find yourself looking into a small enclosed space covered
with a faded purple curtain.";],
has pluralname scenery;
Fake_Object Distant_Bottles Near_Painting
with name
"heavy" "glass" "bottles",
description
"The two bottles of heavy glass are sitting on the table. One glows with
a vivid green light and the other with a pale blue light.",
has scenery;
Bottle Distant_Green_Bottle "green bottle" Near_Painting
with
color "vivid green",
name
"vivid" "green",
before [;
Take, Attack, Open, ThrownAt:
"You can't do anything to the green bottle from here.";],
has scenery;
Bottle Distant_Blue_Bottle "blue bottle" Near_Painting
with
color "pale blue",
name
"pale" "blue",
before [;
Take, Attack, Open, ThrownAt:
"You can't do anything to the blue bottle from here.";],
has scenery;
Inside Pulpit "Pulpit"
with name
"pulpit",
description
"From this raised platform you can see the entire inside of the church.
The pulpit is empty except for the podium which rises from the center.
A small door is visible behind the podium to the north.",
before [;
Pray:
"You pray, with no result. You sense somehow that your prayers are not
so much being unheard as they are ignored.";],
s_to Sanctuary,
n_to Office;
Object Podium "podium" Pulpit
with name
"podium" "stand" "lectern" "carved" "wooden",
description [;
print "This carved wooden podium is where the leader of this church would
have addressed his or her followers. Now, from the podium, you can only
see rows of empty pews and a lone painting of Christ, staring blankly down
from the south wall.";
if (parent(Book) == self)
" A large black book is resting open on the podium.";
else
new_line; rtrue;],
has supporter static scenery;
Object Book "large black book" Podium
with name
"large" "black" "book",
description
"At first you thought this book was a Bible, but now you realize that you
were mistaken. The large, black, leather-bound tome contains passages
you find disturbing, and uncomfortably familiar.",
before [;
Read:
"Much of the book has been damaged by moisture and rats, but some of
the passages are still legible. One in particular sticks in your
mind... ~The way to understand another is through their eyes, because
the eyes are the windows of the soul. Through the eyes the soul may
seen by those who are sensitive, and through the eyes the soul my be
taken by those who have pledged themselves to the ones who wait
beyond.~";
Take:
give self ~concealed;],
has concealed;
Object Painting "painting"
with name
"painting" "portrait" "of" "Christ",
description
"As you look at the painting, a memory seems to float to the surface of
your mind. You remember standing in this church and looking at that
painting. And you remember it staring back at you, with malevolent,
vivid green eyes...",
before [;
Take:
"The painting is too high up on the wall to do anything with.";],
found_in Sanctuary Pulpit Near_Painting,
has scenery;
Object Distant_Eyes "eyes in painting"
with name
"eyes",
description
"There is something unusual about the eyes of the painting, but it is
too far away to see clearly.",
found_in Sanctuary Pulpit,
has scenery;
Inside Office "Small Office"
with description
"This small office has the same run-down appearance of the rest of the
church. Debris covers the floor and a trickle of water comes in around
the boards covering a broken window. A desk stands in the middle of the
room and an empty bookshelf sits against one wall. A pile of ashes marks
where a fire once burned in the middle of the floor. A door to the south
leads back to the sanctuary.",
s_to Pulpit;
Object Desk "desk" Office
with name
"old" "wooden" "desk",
description
"An old wooden desk. Scarred and water-damaged, it has been here for
some time.",
has supporter static scenery transparent;
Object Bookshelf "bookshelf" Office
with name
"bookshelf" "shelf" "shelves" "bookcase",
description
"A warped, wooden bookshelf.",
before [;
Push, Pull:
if (self hasnt general) {
move Grimoire to location;
give self general;
"You push the bookshelf to one side, revealing an old book bound
in a strange reddish cover.";}
Search:
if (self hasnt general)
"There seems to be something between the bookshelf and the
wall.";],
has container static scenery transparent;
Object Grimoire "old grimoire"
with name
"book" "volume" "grimoire" "old" "red" "reddish" "spellbook",
description
"A very old volume, bound in some strange reddish material. At first you
thought it was leather but it seems to be more closely akin to
snakeskin. The book seems to be a weird grimoire or spellbook and mostly
concerns the soul or spirit.",
before [;
Read:
"The book contains several rituals and procedures all involving the
soul or spirit. The first describes a ritual through which the soul
can be removed from a person's body and placed in a specially prepared
container. The soul remains in the container even if the person's
body dies.^^A second ritual can be employed to use the stored soul as
a receptacle for the sin of another person. This allows the possessor
of another's soul to perform any acts they wish without having to answer
for those acts in the next world.";],
has;
Object Journal "journal" Desk
with name
"old" "book" "journal" "diary" "page" "pages",
initial
"An old book lies on the desk.",
description [;
if (self hasnt general)
"A book of blank pages, the kind that would be used to keep a ledger
or a journal. Unfortunately, someone has torn out most of the
pages and only blank sheets remain.";
else
"A book of blank pages, the kind that would be used to keep a ledger
or a journal. Someone has torn out most of the pages, but the ashes
have made the indentations from the last entry legible.";],
before [;
Search:
"Looking carefully at the book you notice that the last entry must
have been made with great force. The entry has left indentations on
the first blank page in the book.";
Read:
if (self hasnt general)
"But, the pages are all blank!";
else
Achieved(3);
"You read the last entry from the journal... ~I cannot continue.
The more I come to know her the more I realize that I cannot
continue to corrupt her. She was pure and innocent before I took
her, and that innocence allows her to continue to trust me even
after what I have done. I only hope that the taint of that which
I have done has not stained her irrevocably and that she will go
to her proper place after I release her... and that I shall go to
mine.~";],
has;
Object Pile_of_Ash "pile of ash" Office
with name
"pile" "of" "ash" "ashes" "fire",
description
"It seems as if a good sized fire once burned here; it is amazing that the
entire room did not catch fire. From the occasional bit of unburned
material it seems as if whoever built the fire was burning books,
probably from the now empty bookcase. Mixed in with the ashes you find
a number of jagged shards of glass.",
before [;
Take:
if (Ash notin player) {
move Ash to player;
"You pick up a handful of ashes.";}
else
"You already have a handful of ashes.";
Search:
<<Examine Broken_Bottle>>;],
has scenery;
Object Ash "handful of ashes" Limbo
with name
"handful" "of" "ashes" "ash",
description
"A handful of old ashes.",
before [;
Drop, ThrowAt:
move self to Limbo;
if (location ofclass Outside)
"You toss down the ashes, which scatter in the wind.";
else
"You toss down the ashes, which scatter among the debris on the
floor.";
Rub, Insert, PutOn:
if (second == Journal) {
give Journal general;
"As you rub the ashes against the page, the indentations fill in
and the last entry becomes visible.";}];
Object Broken_Bottle "broken shards of glass" Office
with name
"broken" "jagged" "bottle" "shards" "glass",
description [;
print "A number of shards of broken glass lies mixed in with the ashes.
From the look of the fragments, it was some kind of thick walled bottle
that was smashed into the floor.";
if (Stopper hasnt moved)
print " A curious object lies in with the shards of glass. It looks like
a heavy rubber stopper with a chain hanging from it.";
new_line; rtrue;],
before [;
Take:
"You cut your finger on the glass as you attempt to pick it up.";],
has pluralname scenery;
Object Stopper "heavy stopper" Office
with name
"heavy" "stopper" "rubber" "chain" "object" "lead" "weight",
description
"A heavy rubber stopper, such as would be used to close a bottle. Bits of
wax still cling to the edge showing where the bottle was sealed with the
stopper in place. A fine chain hangs from the stopper and ends in an oddly
carved lead weight.",
before [;
Take:
give self ~concealed;],
has concealed;
Object Robe "embroidered robe" Office
with name
"embroidered" "red" "robe" "robes",
initial
"A richly embroidered robe hangs beside the door.",
description
"Richly embroidered red robes, such as might be worn for ceremonial
purposes.",
has clothing;
Inside Steeple_Chamber "Steeple Chamber"
with description
"This small chamber is about halfway up the steeple of the church. Rain
and wind from the storm outside blows in through an open window frame and
water collects in puddles on the warped floor, mixing with the droppings
of the birds, or perhaps bats, which can be heard fluttering around
overhead. Looking up, you can see a maze of beams and supports that form
the interior of the steeple. Rain pours in from an opening higher in the
steeple and trickles out through a trap door in the floor.",
n_to Steeple_Door,
u_to [;if (parent(Rope) ~= location)
"There is no good way to climb upwards from here.";
else
return Rope;],
d_to [;if (Railing_Top.is_over ~= Vestibule)
"The drop to the floor of the vestibule below is too far for you
to jump safely.";
else
return Vestibule;];
Inside Inner_Chamber "Inner Chamber"
with description
"Even with the door open and the wind from the storm blowing in this room
is rank with a fetid odor. The floor is piled high with trash and half
eaten scraps of food. There are no windows, only the broken door frame
to the south. An old sofa is pushed against one wall and a heavy table
sits in the middle of the room. A curtained archway is to the north.",
before [;
Smell:
"The room smells of urine, sweat and rotting food.";],
s_to Steeple_Door,
n_to Curtain;
Object Steeple_Door
with name
"heavy" "wooden" "door" "barred" "handle" "knob" "splintered",
short_name [;
if (self hasnt open)
print "heavy wooden door";
else
print "splintered frame";
rtrue;],
description [;
if (self hasnt open)
"This heavy wooden door looks to be newer and of more sturdy
construction than the rest of the church. A large, heavy handle is
set into the door.";
else
"The door has been wrenched from its opening. Only the splintered
remains of the frame remain.";],
when_open [;
print "A gaping splintered opening lies to the ";
if (location == Steeple_Chamber)
"north.";
else
"south.";],
when_closed
"The heavy wooden door to the north is closed.",
door_to [; if (location == Steeple_Chamber) {
Achieved(2);
return Inner_Chamber;}
else
return Steeple_Chamber;],
door_dir [; if (location == Steeple_Chamber) return n_to;
return s_to;],
found_in Steeple_Chamber Inner_Chamber,
has door static openable ~open locked;
Object Curtain "curtain" Inner_Chamber
with name
"curtain" "curtained" "archway" "cloth" "purple",
description [;
if (self hasnt general)
"The curtain is an old and faded purple. It looks as if it may have
been a tablecloth initially.";
else
<<Examine Mirror>>;],
describe
"^A curtain of purple cloth hangs in the archway.",
door_to [;
if (self hasnt general) {
give self general;
move Mirror to location;
Achieved(5);
"You push the curtain aside and pause. On the other side of the
curtain is a room much like the one you are in. A figure stands in
the archway, apparently about to enter your room, and it is the sight
of this figure which has brought you up short. It is, or was, human... once.
Now, it is a withered mass of decaying flesh. It's clothing hangs
in tatters and it is caked in mud and grave mold. Patches of hair
hang from it's scalp and bones are visible in places through it's skin.
The only thing that remains intact are it's eyes; pale blue and now
wide open and staring.^^The creature raises its hand to you, and you
find yourself doing the same. You reach out your arm and touch...
^^^^...a cold unyielding surface of polished glass.^^^^Suddenly, the
realization of what you are seeing comes home to you, and you step back
from the mirror with a cry.";}
else
"You glance towards the mirror but realize that there is no need to
enter its reality, for the reality in the mirror is your own.";],
door_dir n_to,
has door static open;
Object Mirror "mirror" Limbo
with name
"mirror" "glass" "frame",
description [;
if (self hasnt open)
"A highly polished mirror in a plain wooden frame. The mirror reflects
the contents of the room you are in and you find yourself averting
your gaze from what you see there. You note that the mirror frame
is hinged on one side.";
else
"A highly polished mirror in a plain wooden frame. The mirror has
been swung away from the wall, revealing two holes at about eye
level.";],
before [;
Open, Pull:
if (self has open)
"The mirror doesn't swing any further from the wall.";
move Inner_Holes to location;
give self open;
"You swing the mirror away from the wall, revealing a pair of holes
cut in the wall behind it.";
Close, Push:
if (self hasnt open)
"The mirror is firmly against the wall.";
move Inner_Holes to Limbo;
give self ~open;
"You swing the mirror back against the wall.";],
has static scenery;
Object Inner_Holes "holes in the wall" Limbo
with name
"eye" "hole" "holes",
description
"The holes are small, about the size of your thumb, and are at about eye
level.",
before [;
Search:
if (Sanctuary has visited)
"You look through the holes and find yourself looking down into the
sanctuary of the church with a clear view of the pulpit. From the
angle, you realize that you are looking down through the eyes of the
painting of Christ.";
else
"You find yourself looking down into the sanctuary of a church.
Rows of dust covered benches face a raised pulpit and podium.";],
has pluralname scenery;
Object Table "heavy wooden table" Inner_Chamber
with name
"heavy" "wooden" "table",
description
"A heavy table of rough cut wooden planks. Curious symbols are carved
into the wood and the top is oddly stained.",
before [;
Take, Push, Pull:
"The table is too heavy for you to move.";
Turn:
"A sudden desire to rearrange the furniture?";],
has static supporter;
Object Lamp "oil lantern" Table
with name
"flickering" "oil" "lantern" "lamp",
description
"A old oil-burning lantern. Possibly brass, but very tarnished. The
glass chimney is almost opaque with soot and grime.",
has light;
Fake_Object Bottles "pair of glass bottles" Table
with name
"pair" "of" "bottles",
initial
"A pair of heavy glass bottles sit on the table.",
description
"The bottles are made of a heavy, leaded glass and closed with a cork
stopper sealed with wax. Inside the bottles, an oddly shaped lead weight
hangs like a pendulum from a string. The bottles glow faintly.",
before [;
Take:
<Take Blue_Bottle>;
<Take Green_Bottle>;
Attack:
if (random(2) == 1)
<<Attack Blue_Bottle>>;
else
<<Attack Green_Bottle>>;],
has static;
Bottle Blue_Bottle "blue bottle" Table
with name
"pale" "blue",
color "pale blue",
open_bottle [;
deadflag = 1;
"A cloud of faintly glowing blue mist rises from the bottle and hangs in
the air before you. You feel a brief moment of freedom, of release.^^
Then, you realize that ", (the) Old_Man, " has started chuckling to
himself. The first jolt of pain hits. The cloud suddenly jerks and
starts moving downward, as if drawn by a strong suction. The pain
intensifies and you drop first to your knees, then flat onto the ground
as if trying to follow the mist, which is now soaking into the earth.
The pain becomes excruciating. The last thing you see, as everything
fades to black, is ", (the) Old_Man, " standing over you, laughing...";],
has concealed;
Bottle Green_Bottle "green bottle" Table
with name
"vivid" "green",
color "vivid green",
open_bottle [;
deadflag = 2;
Achieved(6);
print (The) Old_Man, " suddenly realizes what you are doing. With a
scream of ~Noooo!~, he throws himself towards you";
if (((location == Inner_Chamber) && (parent(Lamp) == Table)) ||
((location ofclass Inside) && (parent(Lamp) == location))) {
give Lamp general;
print " knocking over the lantern in the process";}
if ((location ofclass Inside) && (parent(Lamp) == Player)) {
give Lamp general;
print " knocking the lantern from your hands in the process";}
print ". As he collapses at your feet, a glowing green mist rises from
the bottle and hangs before him. ~No!~, he whispers.^^Then, the mist
starts moving slowly downward as he doubles over and screams in agony.
As the mist soaks into the ground, he looks up at you and screams,
~I'll get my revenge~ I'll see you in hell. I'LL SEE YOU IN HELL!
Ia! Ia! Fthagn... Aaaaagh...!~^^His body collapses to the ground. As
you watch the body blackens and decays until, within only a few moments,
what is left appears to be a many-months old corpse.^^";
if (Lamp has general)
print "You hear a sudden *Whumph!* and look around. The spilled oil
from the broken lantern has ignited. ";
else
print "With a loud *CRAK*, lightning strikes the steeple of the
church. With a roar, the wooden structure catches fire. ";
if ((parent(Blue_Bottle) == player) && (location ofclass Inside))
print "Clutching the second bottle to you, you race outside. ";
if ((parent(Blue_Bottle) == Table) && (location == Inner_Chamber))
print "You grab the blue bottle from the table and race outside. ";
if ((parent(Blue_Bottle) == location) && (location ofclass Inside))
if (parent(Blue_Bottle) ~= player)
print "Responding to an urge you cannot explain, you run to ",
(the) parent(Blue_Bottle), ", grab it, and then run away from the
church. ";
"You watch for a moment as flames consume the church. With a crackling
roar, the steeple collapses inward and a plume of flame shoots skyward.^^
Clutching the bottle to you, you make your way down the hill.";],
has concealed;
Object Sofa "old sofa" Inner_Chamber
with name
"old" "sofa" "furniture" "lounge" "bed",
description
"An old sofa, so patched, faded and stained that its original color can no
longer be determined. An unidentifiable odor rises from it.",
has static scenery supporter enterable;
Object Old_Man Sofa
with
is_following false,
name
"old" "man" "silas" "wingate",
short_name [;
if (self hasnt general)
print "old man";
else
print "Silas";
rtrue;],
description [;
"An old, extremely gaunt man. ", (The) self, " is drawn and pale, his
hair long and wild and his clothing filthy, torn and unkempt. But, an
active intelligence burns behind the vivid green eyes with which he
watches you; eyes which also contain a taint of madness.";],
react_before [;
if ((action == ##Tie) && (second == self))
print_ret (The) self, " draws back as you approach. ~Don't be
foolish!~ he hisses.";],
life [;
Answer, Tell:
print_ret (The) self, " laughs softly. ~Do you think your opinions
matter to me anymore?~";
Ask:
switch(second) {
'church', 'here', 'home':
print_ret (The) self, " looks around. ~Yes.. I knew you would
return here. This is your home... only one you have left. The
villagers would not have welcomed you before; they certainly
will not now. And besides, the bottle will keep you here. *I*
will keep you here.~";
'village', 'villagers':
"~Fools! Pathetic weaklings! They cannot understand. *Will*
not understand. They would rather stay with their pathetic,
safe god than open their eyes to the true masters of the
universe. You understood. You saw. Then, they caused you to
doubt yourself. Caused you to doubt your decision.~";
'decision', 'happened', 'result':
"~Why, to become immortal, of course! But, you changed your
mind. You freed her; freed her soul. But she had already
absorbed too much of your sin, hadn't she? She went to
eternal punishment, for *your* sins. And so, you tried to
to kill yourself. But, you forgot about this, didn't you?
You forgot where *your* soul was.";
'she', 'her', 'woman':
"~I still don't know what your fascination with her was.
Certainly the other villagers never approved of your
'relationship'.~";
'me', 'myself', 'i':
print_ret (The) self, " laughs. ~What did you expect? After you
saw what happened to *her* and realized that *you* were the one
responsible you went, shall we say, mad? You always were weak.
There was only one thing to be done, wasn't there?~";
'bottle', 'bottles':
"~Beautiful, aren't they? That's what *you* used to say. I
remember how you used to stare at them for hours. How you
used to try to understand them...";
'blue':
"~Yes. That is you. Or, should I say, *was* you. It's *mine*
now. The receptacle for *my* sin.";
'green':
"~You see, I am safe now... I have transferred my sin to your
soul. *If* I ever decide to release it, I will go to *your*
reward, while you will go to *my* punishment.~";
'soul':
"Safe, I promise you. They are safe.";
'book': "You never had the stomach to read it before. Why the
interest now?";
'dog':
"A useful creature. Quite intelligent, you know.";
'man', 'him', 'himself':
give self general;
give self proper;
"What? You've forgotten me? How could you forget Silas?
Your servant... your colleague... your... teacher...?";}
print_ret (The) self, " giggles uncontrollably.";
Attack:
print_ret (The) self, " easily avoids your blows. He stares at you
with his vivid green eyes. ~You were no match for me before... You
are certainly no match for me now!~";
ThrownAt:
move noun to location;
print_ret (The) self, " easily avoids ", (the) noun, ". ~Pathetic!~
he says.";
Show, Give:
print_ret (The) self, " isn't interested.";],
daemon [d p;
d = parent(self);
p = location;
if ((location == Inner_Chamber) || (p == d)) {
self.is_following = true;}
else {
if (self.is_following) {
move self to p;
"^Babbling to himself, ", (the) self, " wanders after you.";}}
rtrue;],
has male animate;
Inside Belfry "Belfry"
with description
"The belfry of the church, high up inside the steeple. You are hanging
from a maze of support beams and trusses with the nearest solid floor
far below you. Large open frames give a view of the surrounding forest
and of the town at the base of the hill. They also allow the fury of the
storm to pass in unimpeded. You can see the branch of an oak tree just
outside the southern frame.",
before [;
Jump:
deadflag = 1;
"You leap off of the support and plummet to the floor below. The last
thing you hear is the peal of thunder outside.";
Climb:
if (noun ~= Rope)
"You climb around on the supports a bit, but are unable to move much
further up or down the steeple.";
Drop:
if (noun ~= Rope) {
move noun to Steeple_Chamber;
print_ret (The) noun, " tumbles through the beams to the floor
below.";}
else {
move Rope to location;
"The rope swings freely from the bell again.";}],
s_to Top_Of_Tree,
u_to "There doesn't seem to be any way to climb higher into the steeple.",
d_to [; if (Rope in location)
return Rope;
else
"The drop to the floor below is too far for you to climb
safely.";],
cant_go "You climb around on the supports a bit, but are unable to make much
progress in that direction.";
Object Bell "bell" Belfry
with name
"bell",
description [;
if (self hasnt general)
"This massive bell once summoned worshippers to the church. Now, it
only serves as the home for birds and rodents. The mount for the bell
has broken on one side, and the other is barely holding on. You are
surprised that it has not broken free and plummeted from the steeple
before this.";
else
"The bell lies half buried in the mud. The fall has cracked and dented
it to the point where it will obviously never ring again.";],
describe [;
if (self hasnt general) {
print "^A massive bell hangs here, from a damaged mount.";
print "^A heavy rope is attached to the bell and ";
if ((Rope.is_tied_to ~= 0) && (Rope.is_tied_to in location))
print "tied to ", (the) Rope.is_tied_to, ".";
else
print "hangs through the beams to the room below.";
new_line; rtrue;}
else
"^A broken bell lies half-buried in the mud.";],
before [;
Take:
"The bell is far too heavy to move.";
Push, Pull:
if (Rope.is_tied_to == Steeple_Door) {
Achieved(4);
give self general;
give Steeple_Door open ~openable;
move Bell to Front_Church;
move Rope to Limbo;
Rope.is_tied_to = 0;
give Rope absent;
"You shove against the bell. For a few seconds, the support takes
the strain. Then, with a loud cracking noise, the bell tears loose
from the beam and falls from the steeple. You hear the sound of
splintering wood from below and then duck aside as the splintered
remains of the door are pulled past you and out the open window. A
metallic crash is heard from the ground outside."; }
else {
if (self hasnt general)
"A good shove would probably cause the bell to plummet from the
steeple. Of course, if it did, you would never be able to get it
back up here again so you decide against it for now.";
else
"The bell has buried itself too far in the mud to move.";}
Ring:
if (self hasnt general)
"The bell makes a muted ~CLANK~.";
else
"This bell will never ring again.";],
has static;
Object Rope "heavy rope"
with
is_tied_to 0,
name
"heavy" "worn" "frayed" "hanging" "sturdy" "rope",
describe [;
if (location == Steeple_Chamber) {
print "^A frayed but heavy rope hangs from somewhere overhead.";
if (self.is_tied_to ~= 0) {
if (self.is_tied_to ~= Steeple_Door)
print " There is ", (a) self.is_tied_to, " hanging from the end
of the rope.";
else
print " The rope is tied to the handle of the door.";}
new_line;}
rtrue;],
description [;
print "A frayed but heavy section of rope.";
if (self.is_tied_to ~= 0)
print " ", (The) self.is_tied_to, " is tied to the rope.";
new_line; rtrue;],
before [;
Tie:
if (second == player)
"Trust me, suicide is *not* the answer here...";
if (second == self)
"Practicing your knot tying?";
if (second == Bell)
"The rope is already securely attached to the bell.";
self.is_tied_to = second;
if (parent(second) ~= player) move Rope to parent(second);
"You tie the rope securely to ", (the) second, ".";
UnTie:
if (self.is_tied_to == 0)
"But, the rope isn't tied to anything!";
if (second ~= 0) {
if (second == Bell)
"You are unable to loosen the rope from where it is attached to
the bell.";
if (second ~= self.is_tied_to)
"But, the rope isn't tied to ", (the) second, ".";}
print "You untie the rope from ", (the) self.is_tied_to, ".";
self.is_tied_to = 0;
new_line; rtrue;
Drop:
if (parent(self.is_tied_to) == player)
"You release the rope, but it remains attached to ",
(the) self.is_tied_to, " which you are holding and doesn't fall
very far.";
Climb:
<<Go self>>;
Pull:
if (location == Steeple_Chamber)
"You hear a metallic <CLANK> from somewhere overhead.";
else
"The bell moves slightly in its mount and emits a metallic
<CLANK>.";],
react_before [;
if (action == ##Go) {
if (self in player) {
"The rope is securely attached and you can't go very far while
holding it.";}
if (self.is_tied_to in player) {
print_ret (The) self.is_tied_to, ", which you are holding, is tied
to the rope which prevents you from moving very far.";}}],
react_after [;
if (noun == self.is_tied_to) {
if ((action == ##Drop) || (action == ##Insert) ||
(action == ##ThrowAt) || (action == ##PutOn) ||
(action == ##PutUnder)) {
move self to parent(self.is_tied_to);
if (location == Belfry) move self to Belfry;}
if ((action == ##Take) || (action == ##Remove)) {
move self to player;}}],
door_to [; if (location == Steeple_Chamber) return Belfry;
return Steeple_Chamber;],
door_dir [; if (location == Steeple_Chamber) return u_to;
return d_to;],
found_in Steeple_Chamber Belfry,
has door ~openable open;
Object Beams "beams" Belfry
with name
"support" "supports" "beam" "beams" "truss" "trusses",
description
"Rough hewn from wood, the beams and trusses are dirty and covered with
bird and animal droppings which make footing treacherous.",
has pluralname static scenery;
Object Town "town"
with name
"town" "village" "city" "base" "hill" "lights",
description
"The small town huddles at the base of the hill. A few lights shine
defiantly against the storm but for the most part it seems quiet, as if
its inhabitants are waiting inside their homes for the fury to pass them
by.",
found_in Top_Of_Tree Belfry,
has scenery;
Object Debris "debris"
with name
"trash" "debris" "junk" "stuff" "litter" "dirt",
description
"Sticks, leaves, unidentifiable trash and scraps of paper litter the
floor. Some of it looks as if it has been here for years and none of
it appears useful.",
before [;
Take:
"You have no use for any of the trash.";],
found_in [; if (location ofclass Inside) rtrue;],
has scenery;
Object Inside_Windows "broken windows"
with name
"stained" "glass" "broken" "window" "windows" "board" "boards" "frame",
description
"Once these frames may have contained magnificent stained glass windows,
each showing in imagery some tale of religious significance. Now, only
fragments of colored glass remain. The frames are boarded up and the
wind whistles mournfully through the cracks.",
before [;
Take, Push, Pull, Open, Close:
"The boards are nailed firmly in place.";],
found_in Vestibule Sanctuary Pulpit,
has scenery pluralname;
!*******************************************************************************
!*** Menus
!*******************************************************************************
Menu Help_Top "The Awakening";
!** with description
!** "Make a selection...";
Option -> "For new players"
with description [;
print "~The Awakening~ is a text adventure game. You interact with the game by
typing phrases like EXAMINE CHAIR or OPEN DOOR and the game responds by
describing the world around you and the results of your actions.^^";
print "There are certain commands which are common to all adventure games. You
move around by giving the compass direction in which you want to go; for example
NORTH or SOUTHEAST. All directions can be shortened to one or two letters; in
this case N or SE. You can also go UP or DOWN (U or D). In some locations IN or
OUT work. You can also ENTER or CLIMB things.^^";
print "When you first enter a location, the game will describe the location to
you. After that, it will only tell you the name of the location. You can see the
full description at any time by typing LOOK (or L). You can tell the game to
always give the full description by entering VERBOSE.^^";
print "You interact with the environment in many ways. You GET items to pick them
up and DROP items to put them down. You can also PUT items IN things or GET items
FROM others. Fairly complex sentences are possible, for example GET THE RED BRICK
AND THE BLUE BALL FROM THE METAL BOX THEN THROW THE BRICK AT THE WINDOW is a valid
input.^^";
print "You may encounter people or other creatures while exploring the world of
the game. You can ask these people questions by typing ASK person ABOUT topic and
tell them things by saying TELL person ABOUT topic. You can also SHOW them things.
You can ask them to do things with PERSON, COMMAND. For example, to ask Bob to pick
up the book, type BOB, GET THE BOOK.^^";
print "To look at an item more closely, EXAMINE it. (EXAMINE can be abbreviated
as X) To get a list of everything you are carrying type INVENTORY (or I). Some
other useful commands you can try are PUSH, SEARCH, SHAKE, THROW, RUB, KICK, CLIMB
or READ. A part of any text adventure is learning what words the game knows. ~The
Awakening~ knows hundreds of words, so feel free to try anything.^^";
"If you get really stuck, you can access a hint menu at any time by typing HINTS.
If you would rather not be tempted, you can turn the hint feature off by entering
HINTS OFF.";];
Option -> "About this game"
with description [;
print "~The Awakening~ is my first piece of interactive fiction. It is based
(very) loosely on several stories by H.P. Lovecraft, most notably ~The Outsider~,
~The Terrible Old Man~ and ~The Two Black Bottles~.^^";
print "I mainly wrote ~The Awakening~ as a learning exercise. I had started several
other games, but they were all too big and I found myself becoming overwhelmed by
the scope of the game along with learning the language. I was inspired to try a
smaller game by the Textfire games which came out in April of 1998. ~The Awakening~
became much larger than any Textfire, but the inspiration was there.^^";
print "It took longer to finish the game than I expected. My main problem involved
the rope that is encountered in the game. Originally, it was far more complex than
what is now implemented. Even what is there now doesn't work quite as well as I
would have liked.^^";
"I hope you enjoy the game. Since it is my first game, feedback is especially
welcome. At this time (July 1998) my most stable e-mail address is:^^
Dennis_Matheson@@64compuserve.com^^
or, you can reach me by snail mail at:^^
Dennis Matheson^
4068 Maxanne Dr.^
Kennesaw, GA 30144^^
Enjoy!";];
Option -> "Credits and Acknowledgments"
with description [;
print "This game would not exist without the help and efforts of several people^^";
print "First, credit must be given to Graham Nelson for developing the Inform
compiler without which this game would not have been possible. Inform, a language
for developing interactive fiction games, is available via ftp from:^^
ftp.gmd.de/if-archive/inform^^";
print "Second, the menus used in this game (including this one) are developed
using L. Ross Raszewski's menu libraries. These libraries (AltMenu.h, DoMenu.h and
Hints.h) are also available from ftp.gmd.de.^^";
"And finally, thanks must be given to the many fine people on
rec.arts.int-fiction who have answered so many of my questions. Thanks go to
Andrew Plotkin, L. Ross Raszewski, Joe Mason, Joyce Haslam, Mary Kuhner,
Michael Gentry, ~FemaleDeer/Doeadeer3~ and all the others whose names I have
misplaced. Thanks, all of you.";];
Option -> "License and Copyright info"
with description [;
print "1) Copyright: ~The Awakening~ is copyright 1998 by Dennis Matheson.^^";
print "2) Distribution: ~The Awakening~ may be distributed freely by any means
so long as a) This notice remains intact and b) no charge other than a nominal
fee to cover the cost of distribution is made. It may be included as part of
a commercial distribution provided that my permission is given first.^^";
print "3) Derivative Works: ~The Awakening~ is distributed with its source code.
Derivative works are permitted of ~The Awakening~ so long as a) They are clearly
identified as such and reference is made back to this original version and b)
such works must freely redistributable under the same terms as stated above.^^";
print "4) Support: ~The Awakening~ is distributed without any support of any
kind. Feel free to contact me at the address given, but I make no guarantee that
I will respond.^^";
"5) Warranty: ~The Awakening~ is distributed totally without any warranty of any
kind. The entire risk of using this program is totally assumed by the user.";];
Option -> "Hints..."
with description [;hint_menu.select();return 2;];
Option -> "Walkthru"
with description [;
print "Well, things could be starting off better here. Let's start by
going UP to get out of this hole. Now, let's take a look around. Hmmm...
Not much here. Maybe the church to the east has something. So, let's go
EAST.^^";
print "Not much here either. The main path seems to go to the southeast
so let's follow it to the SOUTHEAST.^^";
print "Nice doggie! Head NORTH to the front door. Oops! Guess that won't
work. How can we get past this dog? Maybe if we ATTACK THE DOG it will
leave.^^";
print "That wasn't our best idea, was it? Better get out of here! Head off
to the NORTHEAST. The dog is still following us so let's go on around the
church to the NORTHWEST, SOUTHWEST and SOUTHEAST.^^";
print "Hey, that worked pretty well! While the dog is tangled up let's
take the opportunity and go NORTH.^^";
print "All right! Our first points! Let's look around here a bit then
go NORTH again. Not much better inside than out, is it? What's that trap
door in the ceiling for? Doesn't seem to be any way to get up there so
let's explore down here some more. Go on NORTH into the sanctuary.^^";
print "What a dump. Not much left except a painting so let's EXAMINE THE
PAINTING. That's interesting; apparently we've been here before. Head on
to the NORTH some more and let's see what else we can remember.^^";
print "EXAMINE THE PODIUM. Ah, a book. READ THE BOOK and see what else we
can discover. I don't know about you, but I'm getting the impression that
this is an unusual church. Let's head NORTH and check out the rest of the
ground floor.^^";
print "This room looks interesting. EXAMINE THE JOURNAL on the desk then try
to READ THE JOURNAL. Well, somebody didn't like something they had written.
SEARCH THE JOURNAL and see if we can find out anything. Indentations... Well,
I've seen enough detective movies to know what to do next. EXAMINE THE ASHES
then GET THE ASHES. OK, now RUB THE ASHES ON THE JOURNAL. Now we're getting
somewhere! READ THE JOURNAL again.^^";
print "Starting to get a bad feeling about this? Too bad those books were
burned, they might have told us something. Think they (whoever ~they~ were)
missed anything? SEARCH THE BOOKCASE. Ah ha! PUSH THE BOOKCASE then READ
THE BOOK we have found.^^";
print "I'm starting to get a feel for what is happening here. EXAMINE THE
GLASS on the floor. Wonder what that was for? Well, there doesn't seem to
be much more to do here so let's go back SOUTH a few times until we reach
the Vestibule again. That trap door still looks inviting but we haven't
found a ladder. Or have we?^^";
print "Go SOUTH again to the Porch. EXAMINE THE RAILING. Well, it looks kind
of ladder-like, doesn't it? GET THE RAILING. Good thing this church is in
such bad shape. Now, go back NORTH and PUT THE RAILING UNDER THE TRAP
DOOR. Now, CLIMB THE RAILING.^^";
print "Hey, that worked! Let's see what we have here. Another door, let's
try and OPEN THE DOOR. Locked? Now what? Not much here except for this rope.
I guess it's a bell rope. PULL THE ROPE. Yep, a bell. I wonder if there's
anything else up there? CLIMB THE ROPE and find out.^^";
print "EXAMINE THE BELL. Well, maybe climbing that rope wasn't the best
idea. I mean, the rope seem sturdy enough but this bell seems ready to fall
at any point. PUSH THE BELL. Yes, fairly unstable. And that gives me an
idea.^^";
print "First we need another way out of here. Let's check to the SOUTH. OK,
we're out on a limb. We can't get down from here without a ladder but we
know where one of those is, don't we?^^";
print "Let's go back NORTH then CLIMB THE ROPE again. Now, TIE THE ROPE
TO THE DOOR. Good idea, huh? Go DOWN then GET THE RAILING. Now, go SOUTH
twice and PUT THE LADDER AGAINST THE TREE. CLIMB THE LADDER and go NORTH.^^";
print "Now, PUSH THE BELL and duck. That worked better than I had hoped! Go
back SOUTH then DOWN. GET THE LADDER, go NORTH twice and PUT THE LADDER UNDER
THE TRAP DOOR again. Now go back UP. Looks like we can go NORTH now.^^";
print "Well, *this* is an interesting room, isn't it? Let's talk to the man in
here for a while. ASK THE MAN ABOUT... a few things. Doesn't seem too helpful,
does he? Well, let's do some more exploring on our own. Let's start by going
NORTH.^^^^";
print "Let's stop and reflect on this latest discovery a bit. Things are
apparently a little worse than we thought. Let's EXAMINE THE MIRROR again then
OPEN THE MIRROR. Now, LOOK THROUGH THE HOLES. Well, we know what was going on
with that painting now.^^";
print "OK, now let's EXAMINE THE BOTTLES on the table. EXAMINE THE BLUE BOTTLE
and EXAMINE THE GREEN BOTTLE. Now, think about what we've read, the broken
bottle we found, our ~condition~ and the distinctive feature of our ~friend~
on the sofa. Well, there seems to be only one thing to do; OPEN THE GREEN
BOTTLE or BREAK THE GREEN BOTTLE.^^";
"Guess he wasn't expecting *that*! Now, what do we do about *our* situation?
Looks like that will have to wait for the next game for that...^^";];
Menu Hint_Top "Hints"
with description
"Select a hint...",
title_bar
"The Awakening";
Menu -> "In the Mud";
HintTopic -> -> "How do I get out of here?";
Hint -> -> -> "Try going up.";
Menu -> "Outside the Church";
HintTopic -> -> "What can I do in the graveyard?";
Hint -> -> -> "Not much...";
Hint -> -> -> "Look around some.";
Hint -> -> -> "You could pick up the broken limb.";
Hint -> -> -> "But there really isn't anything to do here.";
HintTopic -> -> "How do I get past the dog?";
Hint -> -> -> "You could try leading it away.";
Hint -> -> -> "But it doesn't seem to want to follow you very far.";
Hint -> -> -> "Maybe if you gave it a reason to follow you?";
Hint -> -> -> "You could feed it something.";
Hint -> -> -> "If you had any food, that is.";
Hint -> -> -> "Maybe if you did something to make it mad?";
Hint -> -> -> "Try attacking the dog.";
Hint -> -> -> "OK, it's following you. Now what?";
Hint -> -> -> "It's dragging that chain. Maybe you can tangle it up somewhere.";
Hint -> -> -> "With the dog following you, walk completely around the church.";
HintTopic -> -> "How do I get into the hearse?";
Hint -> -> -> "You'll need the keys.";
Hint -> -> -> "And a ward to get past the spirit.";
Hint -> -> -> "Can't find a ward? Some garlic might work.";
Hint -> -> -> "Oh yes, you will need a game that actually has a hearse in it!";
HintTopic -> -> "Is there anything special about the oak trees?";
Hint -> -> -> "Yes.";
Hint -> -> -> "Try climbing them.";
Hint -> -> -> "Too slippery? Maybe you need something like a ladder.";
Hint -> -> -> "Can't find a ladder? Is there something that looks like
a ladder that might work instead?";
Hint -> -> -> "Look around on the Porch.";
Hint -> -> -> "Examine the porch railing.";
Hint -> -> -> "GET THE RAILING then PUT RAILING AGAINST TREE then CLIMB
RAILING.";
Menu -> "Inside the Church";
HintTopic -> -> "How do I get into the trap door?";
Hint -> -> -> "Well, you can't fly up there.";
Hint -> -> -> "So you will have to climb.";
Hint -> -> -> "There is nothing here to climb, so you need to find a ladder.";
Hint -> -> -> "No ladder? Is there something that looks like a ladder that
might work instead?";
Hint -> -> -> "Look around on the Porch.";
Hint -> -> -> "Examine the porch railing.";
Hint -> -> -> "GET THE RAILING then PUT RAILING UNDER TRAP DOOR then CLIMB
RAILING.";
HintTopic -> -> "How do I get past the locked door?";
Hint -> -> -> "Well, it would be polite to knock first.";
Hint -> -> -> "Well, that doesn't help. Look for a key maybe?.";
Hint -> -> -> "OK, so no key. How about breaking it down.";
Hint -> -> -> "Tough door! I guess we need something heavy.";
Hint -> -> -> "Have you been to the belfry yet?";
Hint -> -> -> "That bell sure looks heavy. I bet it could damage the door.";
Hint -> -> -> "Or, better yet, it could be used to pull the door from it's
frame.";
Hint -> -> -> "Go to the Steeple Chamber and TIE THE ROPE TO THE DOOR. Then,
go to the Belfry and PUSH BELL.";
Hint -> -> -> "Oh yeah, make sure you have another way to climb down from the
Belfry before you do...";
HintTopic -> -> "What's with the eyes of this painting?";
Hint -> -> -> "The painting is too far away to get a good look at.";
Hint -> -> -> "So you need to get closer.";
Hint -> -> -> "Have you found your ~ladder~ yet?";
Hint -> -> -> "PUT RAILING UNDER PAINTING then CLIMB RAILING. Now, take a
better look at the painting.";
HintTopic -> -> "What's that thing in the belfry.";
Hint -> -> -> "Uhh.. A bell?";
!*******************************************************************************
!*** And awaaay we go!
!*******************************************************************************
[Initialise;
location = Grave;
StartDaemon(Dog);
StartDaemon(Old_Man);
"^^You remember darkness. And the cold. Cold and darkness. And silence.
Those memories are all that you have. That, and a feeling that something
you never knew you possessed has been lost.^^Suddenly, oblivion is split
by a blinding light and a crash of sound. You awaken to the roar of a
storm and a deluge of rain and mud.^";];
[ChooseObjects obj code prty;
if (code < 2)
{if ((obj ofclass Fake_Object) || (obj has scenery))
return 2;
else
rfalse;}
else
{prty = 2;
if (obj has scenery) prty = prty - 1;
if (parent(player) == parent(obj)) prty = prty + 1;
if (parent(obj) == player) prty = prty + 2;
if ((action_to_be == ##SwitchOn) && (parent(player) == obj))
prty = prty + 1;
return prty;}];
[PrintTaskName achievement;
switch(achievement)
{0: "for getting past the guard dog";
1: "for entering the steeple";
2: "for entering the sealed room";
3: "for reading the journal";
4: "for opening the door";
5: "for discovering the truth";
6: "for extracting your revenge";}];
Include "Grammar";
[ReadSub;
<<Examine noun>>;];
[PutUnderSub;
move noun to location;
"You put ", (the) noun, " under ", (the) second, ".";];
[UnTieSub;
print_ret (The) noun, " isn't attached to anything.";];
[RingSub;
"You don't know how to ring ", (a) noun, ".";];
[XyzzySub;
"A word comes to you, and you shout it out... ~XYXXY!~. The storm responds
with a roar and a crash of thunder. It is a word of power. Once, you
feel, you knew many such words. Now, only this one remains.";];
[HelpSub;
help_menu.select();];
Verb "pet" = "touch";
Verb "kick" = "attack";
Extend "read" first
* noun -> Read;
Extend "put" first
* noun "under"/"below"/"beneath"/"against" noun
-> PutUnder;
Extend "rub"
* noun "with" noun -> Rub reverse
* noun "on" noun -> Rub;
Verb "untie" "detach"
* noun -> UnTie
* noun "from" noun -> UnTie;
Verb "ring"
* noun -> Ring;
Verb "xyzzy"
* -> Xyzzy;
Verb meta "help" "about"
* -> Help;