/*** VERBS ***/

VERB
  sign,  play,
  rname, shell, eat,
  swim,  feed,  score, dig,
  cut,   plug,  tie,   untie,
  wipe,  shake, xyzzy, jamb,
  abracadabra;


sign(PREACT)	= Preact;		play(PREACT)	= Preact;
eat(PREACT)	= Preact;		cut(PREACT)	= Preact;
feed(PREACT)	= Preact;		plug(PREACT)	= Preact;
untie(PREACT)	= Preact;		wipe(PREACT)	= Preact;
shake(PREACT)	= Preact;		jamb(PREACT)	= Preact;
tie(PREACT)	= Preact;
score(PREACT)	= Proc() {Expect(NO_OBJ, NO_OBJ);}
dig(PREACT)	= Proc() {Expect(NO_OBJ, NO_OBJ);}
swim(PREACT)	= Proc() {Expect(NO_OBJ, NO_OBJ);}


i        = inventory;
plugh    = xyzzy;	clean  = wipe;
shut     = close;	peruse = read;
chuck    = throw;	hurl   = throw;
toss     = throw;	heave  = throw;
discard  = drop;	excavate = dig;
grab     = take;	push   = touch;
pet      = touch;	devour = eat;
consume  = eat;		wade   = swim;
ford     = swim;	shazam = abracadabra;
hocus    = abracadabra;	abra   = abracadabra;
end      = quit;	bye    = quit;
leave    = exit;	climb  = up;

/*** VERB ROUTINES ***/

plug(ACTION) = Proc()
{
    If ($loc($ME) == irm13) {
	If ($loc(cotton) == $ME) {
	    "You stick the cotton into the rhino's ears.\n";
	    $move(cotton, $ALL);
	    rhino.earplg = 1;
	    $exit(1);
	}
    }
    "I don't quite understand what you mean.\n";
}


dig(ACTION) = Proc()
{
    If ($loc(shovel) != $ME) {
	"You don't have something to dig with.\n";
	$exit(1);
    }
    If ($loc($ME) == irm9) {
	If (!cotton.tookbt) {
	    cotton.tookbt = 1;
	    "You find some cotton buried in the sand.\n";
	    $move(cotton, irm9);
	    Return 0;
	}
	"OK\n";
	Return 0;
    }
    If ($loc($ME) == prm17) {
	If (!pendant.dugbt) {
	    pendant.dugbt = 1;
	    "You find an ancient pendant buried in the grave.\n";
	    $move(pendant, prm17);
	    Return 0;
	}
	"You dig some but you don't find anything.\n";
	Return 0;
    }
    "The ground is too hard to dig into.\n";
}


cantdo = Proc()
{
    "I don't believe I can do that.\n";
}


sign(ACTION) = cantdo;
play(ACTION) = cantdo;

arolg = Proc()
{
    "It will probably cost you an arm or a leg to feed that.\n";
    $exit(1);
}


feed(ACTION) = Proc()
{
    If (($loc($ME) == irm8) | ($loc($ME) == irm9)) {
	If (Dobj == crocodiles) {
	    arolg();
	}
    }
    If (($loc($ME) == prm19) & (Dobj == bear)) {
	If (!bear.hitbr) {
	    arolg();
	}
    }
    If (($loc($ME) == prm6) & (Dobj == smilo)) {
	If (!smilo.stond) {
	    arolg();
	}
    }
    If (($loc($ME) == prm22) | ($loc($ME) == prm23)) {
	If (Dobj == tyrannosaurus) {
	    arolg();
	}
    }
    "I don't quite understand what you mean.\n";
}


cut(ACTION) = cantdo;

throw(ACTION) = Proc()
{
    If ($loc(Dobj) != $ME) {
	"You don't have it.\n";
	$exit(1);
    }
    "OK.\n";
    cdrop();
}

eat(ACTION) = Proc() {"I think I just lost my appetite.\n";}

abracadabra(ACTION) = Proc()
{
    If (prehs != $loc($loc($ME))) {
        "That phrase hasn't worked in at least ten thousand years.\n";
	Return 0;
    }
    If ($loc($ME) != prm17) {
	"Nothing happens.\n";
	Return 0;
    }
    If (spear.tooky) {
	If (!spear.abrad) {
	    spear.abrad = 1;
	    "The rubble gets magically cleared away.\n";
	    Return 0;
	}
    }
    "Nothing much happens.\n";
}


tie(ACTION) = Proc() {"It is impossible to tie a knot in that right now. \n";}

untie(ACTION) = Proc() {"I don't quite understand what you mean.\n";}

swim(ACTION) = Proc()
{
    If ($loc($ME) == irm8) {
	ei8();
	Return 0;
    }
    If ($loc($ME) == irm9) {
	ei8();
	$move($ME, irm8);
	Return 0;
    }
    "I don't see enough water here to even wade in.\n";
}


wipe(ACTION) = Proc() {"I don't quite comprehend what you are saying.\n";}

shake(ACTION) = Proc() {"That probably won't accomplish much.\n";}

jamb(ACTION) = Proc() {"I don't quite comprehend what you mean.\n";}

xyzzy(ACTION) = Proc()
{
    "You are transported to a room where you are faced by a wizard who ",
    "points to you and says, \"Them's fighting words!\"  You immediately ",
    "get attacked by all sorts of denizens of the museum: there is a cobra ",
    "chewing on your leg, a troglodyte is bashing your brains out with a ",
    "gold nugget, a crocodile is removing large chunks of flesh from you, ",
    "a rhinoceros is goring you with his horn, a sabre-tooth cat is busy ",
    "trying to disembowel you, you are being trampled by a large mammoth, ",
    "a vampire is sucking you dry, a Tyrannosaurus Rex is sinking his six ",
    "inch long fangs into various parts of your anatomy, a large bear is ",
    "dismembering your body, a gargoyle is bouncing up and down on your ",
    "head, a burly troll is tearing you limb from limb, several dire ",
    "wolves are making mince meat out of your torso, and the wizard is ",
    "about to transport you to the corner of Westwood and Broxton. ",
    "Oh dear, you seem to have gotten yourself killed, as well.\n";
    skore();
    ratng();
    ratnx();
    $spec(QUIT);
}


score(ACTION) = Proc()
{
    skore();
    ratng();
}


quit( ACTION ) = Proc()
{
    skore();
    ratng();
    ratnx();
    $spec(QUIT);
}


scale = Proc()
{
    $ME.weight = 0;
    If ($cont($ME)) {
	scads($cont($ME));
    }
}


scads = Proc(obj)
{
    If (obj) {
	$ME.weight = $ME.weight + obj.weight;
	scads($link(obj));
    }
}


TakeAct = Proc() {ctake();}

DropAct = Proc() {cdrop();}


ctake = Proc()
{
    scale();
    If (Dobj.NOTAKE) {
	"That thing is too heavy to carry.\n";
	Skip = TRUE;
	Return 0;
    }
    If ((Dobj.weight + $ME.weight) > 20) {
        "You are carrying too much.  You will have to at least drop ",
        "something first.\n";
	Skip = TRUE;
	Return 0;
    }
    $ME.weight = Dobj.weight + $ME.weight;
    If (!Dobj.rarea) {
	Return 0;
    }
    $ME.pscore = $ME.pscore + Dobj.pfound;
    Dobj.pfound = 0;
}


cdrop = Proc()
{
    If ($loc($ME) == prm21) {
	"OK, it falls further down into the crack.\n";
	$move(Dobj, prm22);
	Skip = TRUE;
	Return 0;
    }
    If (!Dobj.rarea) {
	Return 0;
    }
    Else If ((Dobj.rarea == 2) & ($loc($ME) == mrm5)) {
	scord();
    }
    Else If ((Dobj.rarea == 1) & ($loc($ME) == mrm3)) {
	scord();
    }
}
	
scord = Proc()
{
    $ME.pscore = $ME.pscore + Dobj.pplace;
    Dobj.pplace = 0;
}


rname(ACTION) = Proc()
{
    $sdesc($loc($ME))();
    $exit(1);
}


shell(ACTION) = Proc()
{
    $spec(EXEC, "/bin/csh", "-i", 0);
}