VERB
  pry,  strike, wake,   say,
  beam, join,   opener, glow,
  grab, weigh,  rname,  score,
  debug;

feel	= touch;
shake	= wake;
hit	= strike;
kill	= strike;
shut	= close;
push	= move;
pull	= move;
lift	= move;
destroy	= break;
incant	= say;
chant	= say;
shout	= say;
yell	= say;
out	= exit;


cg = Proc()
{
    "You can't go that way.\n";
    MyLoc = $loc($ME);
}

die = Proc()
{
    "You are dead.  Better luck next time.\n";
    Die();
}


Looks = Proc()
{
    If (Dobj) {
	"Huh?\n";
	$exit(1);
    }
    GOVERB = TRUE;
    MyLoc = -1;
}

n (PREACT) = Looks;
s (PREACT) = Looks;
e (PREACT) = Looks;
w (PREACT) = Looks;

nw(PREACT) = Looks;
ne(PREACT) = Looks;
sw(PREACT) = Looks;
se(PREACT) = Looks;

u (PREACT) = Looks;
d (PREACT) = Looks;

out (PREACT) = Looks;
enter (PREACT) = Looks;

say (PREACT) = Proc()
{
    Expect(NO_OBJ|ONE_OBJ|STR_OBJ|PLAIN_OBJ, NO_OBJ);
    If (!Dobj) {
	"Type just what you want to say: ";
	Dobj = $read();
    }
    If (Dobj >= 0) {
	"You want to make ", $name(Dobj),
	" a linguistic artifact??  Strange!\n";
	$exit(1);
    }
}
say (ACTION) = Proc()
{
    If (Dobj ?= Shazm) {
	WzTgl();
    }
    Else {
	"Very well.  '", Dobj, "'.\n";
    }
}


DWIMD = Proc() {Return Dwimmer($arg(1));}

DWIMI = Proc() {Return Dwimmer($arg(1));}


wake(PREACT) = Preact;
wake(ACTION) = Proc() {"I don't know how to wake ", $name(Dobj), ".\n";}


strike(PREACT) = Preact;
strike(ACTION) = Proc()
{
    "Hitting the ", $name(Dobj), " doesn't seem to do anything.";
}


pry(PREACT) = Proc()
{
    Expect(ONE_OBJ|PLAIN_OBJ, ONE_OBJ|PLAIN_OBJ);
    CheckAvail();
}
pry(ACTION) = Proc() {"I can't seem to manage that.\n";}


Tress = Proc()
{
    "You were warned about trespassing! The fence is electrified!\n";
    die();
}


score(ACTION) = Proc()
{
    If ($loc($ME) == town5) {
        "A mysterious glowing network of lights appears, and you can ",
        "just make out the words:\n",
        "\tYour account is now at $", $str(SCORE), ". ",
        "\tThank you for letting Arpa-Citizen's be your host. ",
        "The network then disappears.\n";
    }
    Else {
	"Hmm, you'll have to check at the local bank.\n";
    }
}


WizP = Proc()
{
    If (!Wizrd) {
	"Only a real Wizard can do that!\n";
	$exit(1);
    }
}

rname(PREACT) = Proc()
{
    If (Dobj) {
	WizP();
	$sdesc(Dobj)();
    }
    Else {
	$sdesc($loc($ME))();
    }
    $exit(1);
}
beam(PREACT) = WizP;
grab(PREACT) = WizP;
join(PREACT) = WizP;
opener(PREACT) = WizP;
glow(PREACT) = WizP;
weigh(PREACT) = WizP;
debug(PREACT) = WizP;

beam(ACTION) = Proc()
{
    If (Dobj) {
	$move($ME, Dobj);
	MyLoc = -1;
    }
}

join(ACTION) = Proc()
{
    If (Dobj) {
	$move($ME, $loc(Dobj));
	MyLoc = -1;
    }
}

opener(ACTION) = Proc()
{
    If (Dobj) {
	Dobj.OPENED = TRUE;
	"Opened.\n";
    }
}

glow(ACTION) = Proc()
{
    $ME.LIGHT = !$ME.LIGHT;
    If ($ME.LIGHT)
	"Your body begins to radiate a strong but gentle white light!\n";
    Else
	"The light from your body fades away.\n";
}

grab(ACTION) = Proc()
{
    If (Dobj) {
	"You have the ", $name(Dobj), ", Boss!\n";
	$move(Dobj, $ME);
	$ME.HAS = $ME.HAS + Dobj.WEIGH;
    }
}

weigh(ACTION) = Proc()
{
    If (Dobj)
	"The ", $name(Dobj), " weighs ", $str(Dobj.WEIGH);
    Else
	"You are carrying ", $str($ME.HAS);
    " pounds, Boss!\n";
}

debug(ACTION) = Proc()
{
    $spec(DEBUG);	// Turn on debugging
}