/*** FUNNY OBJECT ROUTINES ***/
paper(ACTION) = Proc()
{
If (Verb == sign) {
If (paper.signed) {
"You already signed it.\n";
$exit(1);
}
If ($loc(pen) != $ME) {
"You don't have anything to write with.\n";
$exit(1);
}
If ($loc(paper) != $ME) {
"You don't have the release with you.\n";
$exit(1);
}
paper.signed = 1;
$move(grate, $ALL);
If ($loc($ME) == mrm3) {
"In a blinding flash of light, a stone archway appears in the "
"east wall!\n";
}
Else If ($loc($ME) == mrm5) {
"The grate magically disappears into thin air.\n";
$exit(1);
}
Else {
"You hear strange noises in the nearby rooms.\n";
}
$exit(1);
}
Else If (Verb == read) {
If ($loc(paper) != $ME) {
"You don't have the paper with you.\n";
}
Else {
"\t\tTHIS CONTRACT LIMITS OUR LIABILITY\n"
"\t\t\tREAD IT\n"
"\n"
"I, the undersigned, will not hold the AARDVARK, the UCLA "
"Computer Sciences Department, the UCLA Computer Club, Bell "
"Labs, or the Digital Equipment Corporation responsible for "
"any injuries or deaths due to my executing this program.\n";
paper.readl = 1;
}
$exit(1);
}
}
spices(ACTION) = Proc()
{
If ((Verb == throw) & ($loc($ME) == irm8)) {
"The bag of spices lands on the other side of the river.\n";
$move(spices, irm9);
$exit(1);
}
Else If (Verb == eat) {
"Munch, Munch Munch. It needed a little more salt.\n";
$move(spices, $ALL);
$exit(1);
}
Else If ((Verb == throw) & ($loc($ME) == irm9)) {
"The bag of spices gets intercepted by one of the crocodiles, "
"who promptly swallows it.\n";
$move(spices, $ALL);
$exit(1);
}
}
rupees(ACTION) = Proc()
{
If ((Verb == throw) & (($loc($ME) == irm8) | ($loc($ME) == irm9))) {
"The bag is too heavy to throw across the river. It lands in the "
"middle of the river and sinks to the bottom.\n"
$move(rupees, $ALL);
$exit(1);
}
}
coconut(ACTION) = Proc()
{
If (($loc($ME) == irm19) & (Verb == drop)) {
If (!rupees.wellbt) {
"The water in the well rises.\n";
}
Else {
"The water level in the well slowly rises. "
"Magically floating on the water is a bag of rupees.\n";
rupees.wellbt = 0;
$move(rupees, irm19);
}
}
Else If ((Verb == eat) & ($loc(coconut) == $ME)) {
"The coconut is too large for you to consume.\n";
$exit(1);
}
}
clarinet(ACTION) = Proc()
{
If ((Verb == play) & ($loc(clarinet) == $ME)) {
If (($loc($ME) == irm22) & ($loc(cobra) == irm22)) {
"Your clarinet playing sounds so poor that the cobra "
"slithers off in terror.\n";
$move(cobra, $ALL);
$exit(1);
}
Else If (($loc($ME) == irm16) & ($loc(rope) == irm16)) {
If (rope.ropstf == 0) {
"The rope magically extends itself up into the air.\n";
rope.ropstf = 1;
$exit(1);
}
}
"Benny Goodman you ain't.\n";
$exit(1);
}
}
rope(ACTION) = Proc()
{
If (rope.ropstf & (Verb == take)) {
rope.ropstf = 0;
Return 0;
}
Else If (($loc($ME) == prm2) | ($loc($ME) == prm3)) {
If (rope.rtied) {
If (Verb == take) {
"You have to untie the rope first.\n";
Skip = TRUE;
}
Else If (Verb == tie) {
"It's already tied, turkey.\n";
$exit(1);
}
Else If (Verb == untie) {
If ($loc($ME) == prm2) {
$move(rope, $ME);
rope.rtied = 0;
rope.LDESC = rldesc;
rope.SDESC = rsdesc;
"You untie the rope and coil it up.\n";
}
Else If ($loc($ME) == prm3) {
"It's tied down at the other end.\n";
}
$exit(1);
}
}
Else {
If (Verb == tie) {
If ($loc($ME) == prm2) {
"You tie one end of the rope around the pole; the other "
"end dangles down into the canyon.\n";
$move(rope, prm2);
rope.rtied = 1;
rope.LDESC = 0;
rope.SDESC = 0;
$exit(1);
}
"I see nothing to which to tie it.\n";
$exit(1);
}
Else If (Verb == untie) {
"It's already untied.\n";
}
}
}
}
river(ACTION) = Proc()
{
If (($loc($ME) != irm8) & ($loc($ME) != irm9)) {
"You see no river here.\n";
$exit(1);
}
Else If (Verb == take) {
"You can't do that to the river!\n";
Skip = TRUE;
}
}
cobra(ACTION) = Proc()
{
If ((Verb == take) & ($loc($ME) == $loc(cobra))) {
"Taking the cobra would be a poor idea.\n";
Skip = TRUE;
}
}
crocodiles(ACTION) = Proc()
{
If (Verb == take) {
"I can't get to any crocodiles from here.\n";
Skip = TRUE;
}
}
cmara = Proc()
{
If (Verb == take) {
"The statue is too heavy for you to carry.\n";
Skip = TRUE;
Return TRUE;
}
Return FALSE;
}
claks = Proc()
{
If (((Verb == take) | (Verb == touch)) & (statue.tlakst == 0)) {
"The statue slides away very easily, revealing a secret passage.\n";
statue.tlakst = 1;
Skip = TRUE;
Return TRUE;
}
Return FALSE;
}
mara(ACTION) = Proc()
{
If ($loc($ME) == irm10) {
cmara();
}
}
vishnu(ACTION) = Proc()
{
If ($loc($ME) == irm11) {
cmara();
}
}
lakshmi(ACTION) = Proc()
{
If ($loc($ME) == irm12) {
claks();
}
}
statue(ACTION) = Proc()
{
If (($loc($ME) == irm10) | ($loc($ME) == irm11)) {
If (!cmara()) {
"That won't accomplish anything.\n";
$exit(1);
}
}
Else If ($loc($ME) == irm12) {
If (!claks()) {
"I don't see how you can do that to a statue.\n";
$exit(1);
}
}
}
banana(ACTION) = Proc()
{
If ($loc(banana) == $ME) {
If (Verb == eat) {
"You eat the banana, peel and all.\n";
$move(banana, $ALL);
$exit(1);
}
}
If ($loc($ME) == irm20) {
If (Verb == drop) {
"The monkey picks up the banana, eats it, and discards "
"the banana-peel. As soon as the monkey finishes eating "
"the banana, a bolt of lighting hits the stone slab and "
"cracks it open.\n";
monkey.fedmky = 1;
$move(banana, $ALL);
$move(peel, irm20);
Skip = TRUE;
}
}
}
horn(ACTION) = Proc()
{
If (rhino.cutflg) {
Return 0;
}
Else If ($loc($ME) == irm13) {
If (Verb == take) {
"The horn is still attached to the rhino!\n";
Skip = TRUE;
}
Else If (Verb == cut) {
If ($loc(saw) != $ME) {
"You don't have something to cut the horn with.\n";
$exit(1);
}
Else If (rhino.earplg) {
"You cut the horn off without waking up the rhino.\n";
rhino.cutflg = 1;
horn.NOTAKE = FALSE;
$exit(1);
}
Else {
"The noise of the sawing wakes up the rhinoceros who tramples "
"you to death because you disturbed his beauty sleep.\n";
exitg();
}
}
}
}
lattice(ACTION) = Proc()
{
If ($loc($ME) == irm13) {
If (Verb == take) {
If (rhino.earplg) {
"You successfully take the lattice without waking the rhino. "
"Unfortunately, the lattice was the structure which supported "
"the roof of the room, and the ceiling comes crashing down "
"upon you and breaks every bone in your body.\n";
}
Else {
"As you take the lattice, a large part of the bamboo falls "
"down. The noise caused by the falling bamboo scares the "
"sleeping rhinoceros who tramples you in his panicked exit "
"from the room.\n";
}
}
exitg();
}
}
monkey(ACTION) = Proc()
{
If ($loc($ME) == irm20) {
If (Verb == feed) {
If ($loc(banana) == $ME) {
"The monkey takes your banana, peels it, eats it, and throws "
"away the banana peel. As soon as he finishes eating the "
"banana, there is a rumble from the depths of the earth and "
"a crack appears in the stone slab.\n";
monkey.fedmky = 1;
$move(banana, $ALL);
$move(peel, irm20);
$exit(1);
}
}
}
}
cotton(ACTION) = Proc()
{
If ($loc($ME) == irm13) {
If ((Verb == drop) & (Iobj == ears)) {
"You stick the wads of cotton into the rhino's ears.\n";
$move(cotton, $ALL);
rhino.earplg = 1;
Skip = TRUE;
Return 0;
}
If ($loc(cotton) == $ALL) {
If ($loc($ME) == irm13) {
If (Verb == take) {
rhino.earplg = 0;
}
}
}
}
}
pole(ACTION) = Proc()
{
If (($loc($ME) == prm2) & (Verb == take)) {
"The pole is firmly cemented into the ground.\n";
Skip = TRUE;
}
}
lamp(ACTION) = Proc()
{
If (Verb == light) {
onlmp();
$exit(1);
}
Else If (Verb == douse) {
If (!lamp.LIGHT) {
"The lamp is already off!\n";
}
Else {
lamp.LIGHT = 0;
"The lamp is now off.\n";
}
$exit(1);
}
}
oven(ACTION) = Proc()
{
If (($loc($ME) == irm4) & (Verb == open)) {
"The door of the oven doesn't budge.\n";
$exit(1);
}
}
grate(ACTION) = Proc()
{
If ((paper.signed == 0) & ($loc($ME) == mrm5)) {
If ((Verb == open) | (Verb == take)) {
"The grate appears to be firmly cemented into the wall.\n";
If (Verb == open) {
$exit(1);
}
Else {
Skip = TRUE;
}
}
Else If (Verb == shut) {
"The grate is already shut.\n";
$exit(1);
}
}
}
weapo = Proc()
{
If (Verb == throw) {
If ((!bear.hitbr) & ($loc($ME) == prm19)) {
"The axe bounces harmlessly off of the bear.\n";
$move(axe, prm19);
$exit(1);
}
Else If ($loc($ME) == prm14) {
"The weapon that you just threw imbeds itself deep into the "
"skull of the mammoth and is covered by the mammoth's long fur "
"so that it can't be seen. The mammoth just stares back at you "
"blankly.\n"
$move(Dobj, $ALL);
$exit(1);
}
Else If (($loc($ME) == irm8) | ($loc($ME) == irm9)) {
"You miss the crocodile and your weapon sinks into the river.\n"
$move(Dobj, $ALL);
$exit(1);
}
Else If ($loc($ME) == irm13) {
"Your weapon bounces harmlessly off of the rhino.\n";
$move(Dobj, irm13);
$exit(1);
}
Else If (($loc($ME) == prm6) & !smilo.stond) {
"The sabre-tooth catches your weapon in its mouth and promptly "
"swallows it.\n"
$move(Dobj, $ALL);
$exit(1);
}
Else If (($loc($ME) == prm8) & !trogl.killd) {
"You hit the troglodyte, who, screaming in pain, drops the "
"gold nugget and falls over the cliff.\n";
trogl.killd = 1;
$move(Dobj, $ALL);
$move(nugget, prm8);
$exit(1);
}
}
}
spear(ACTION) = Proc()
{
If ($loc(spear) == $ME) {
If ($loc($ME) != prm19) {
weapo();
}
If (Verb == throw) {
"You repeatedly throw your spear at the bear. Eventually, he "
"gets bored and wanders off.\n";
$move(bear, $ALL);
$move(spear, prm19);
bear.hitbr = 1;
$exit(1);
}
}
Else If ($loc($ME) == prm17) {
If (Verb == take) {
If (!spear.tooky) {
"You hear a loud roar as an avalanche blocks the path to "
"your north.\n";
spear.tooky = 1;
}
}
}
Else If (Verb == shake) {
"I don't see any playwrights here.\n";
}
Else If (($loc($ME) == prm23) & (Verb == take)) {
"As soon as you take the spear, the Tyrannosaurus Rex closes his "
"mouth and swallows you.\n";
exitg();
}
}
axe(ACTION) = Proc()
{
If ($loc(axe) == $ME) {
weapo();
}
}
smilo(ACTION) = Proc()
{
If (($loc($ME) == prm6) & (Verb == take)) {
"You must be dumber than you look.\n";
Skip = TRUE;
}
}
troglodyte(ACTION) = Proc()
{
If (($loc($ME) == prm8) & (Verb == take)) {
"The troglodyte does not look like he wants to be carried.\n";
Skip = TRUE;
}
}
plant(ACTION) = Proc()
{
If ($loc($ME) == prm6) {
If ((Verb == throw) | (Verb == drop)) {
If (!smilo.stond) {
"The plant you were holding turns out to be primo grade "
"catnip. The sabre-tooth cat grabs the plant and runs off "
"purring loudly.\n";
$move(plant, $ALL);
smilo.stond = 1;
If (Verb == throw) {
$exit(1);
}
Else {
Skip = TRUE;
}
}
}
}
If (Verb == eat) {
"You completely eat the plant and now feel quite nauseous.\n";
$move(plant, $ALL);
$exit(1);
}
}
nugget(ACTION) = Proc()
{
If ((Verb == take) & !trogl.killd) {
"He ain't gonna let you take it.\n";
Skip = TRUE;
}
}
cheese(ACTION) = Proc()
{
If (Verb == eat) {
"You eat the cheese, but nothing peculiar happens.\n";
$move(cheese, $ALL);
$exit(1);
}
Else If ((Verb == drop) & ($loc($ME) == prm14)) {
"As soon as you drop the cheese, a mouse runs out of the hole in "
"the east wall and takes it. This scares the mammoth who runs off "
"in terror.\n";
mammoth.blokd = 1;
$move(mammoth, $ALL);
$move(cheese, $ALL);
Skip = TRUE;
}
}
mammoth(ACTION) = Proc()
{
If ($loc(mammoth) == $loc($ME)) {
If (Verb == feed) {
"He doesn't look hungry.\n";
$exit(1);
}
Else If (Verb == take) {
"He doesn't look too easy to carry.\n";
Skip = TRUE;
}
}
}
feet(ACTION) = Proc()
{
If (Verb == wipe) {
If ($loc(towel) != $ME) {
"You don't have something to wipe them with.\n";
$exit(1);
}
Else {
"You just cleaned off your feet.\n";
feet.wiped = 0;
$exit(1);
}
}
Else If (Verb == touch) {
"You can't without bending your knees.\n";
}
}
cairn(ACTION) = Proc()
{
If ($loc($ME) == prm18) {
"How dare you do such a thing. Any idiot with just the slightest "
"knowledge of prehistoric etiquette knows that you aren't supposed "
"to do anything to a cairn.\n";
$exit(1);
}
}
bear(ACTION) = Proc()
{
If ($loc($ME) == prm19) {
If (Verb == take) {
If (!bear.hitbr) {
"The bear is a little too bulky to carry.\n";
Skip = TRUE;
}
}
}
}
tyrannosaurus(ACTION) = Proc()
{
If (($loc($ME) != prm22) & ($loc($ME) != prm23)) {
"What? One of those things hasn't existed in several "
"million years.\n";
}
}
hole(ACTION) = Proc()
{
If ($loc($ME) == prm14) {
"That hole is too small to do anything with.\n";
$exit(1);
}
Else If ($loc($ME) == irm19) {
If ((Verb == drop) & (Iobj == hole)) {
"It falls back out of the hole.\n";
Skip = TRUE;
}
}
Else If ($loc($ME) == irm6) {
If ((Verb == drop) & (Iobj == hole)) {
If (Dobj == spices) {
"The bag of spices rips against the jagged sides of the "
"shaft and almost all of the spices get blown away in "
"the wind.\n";
$move(spices, $ALL);
}
Else If (Dobj == rupees) {
"The rupees fall down the shaft into the darkness below. "
"You eventually hear a barely audible splash.\n";
rupees.wellbt = 1;
$move(rupees, $ALL);
}
Else {
"That doesn't fit in the hole.\n";
}
Skip = TRUE;
Return 0;
}
}
Else {
"I do not see any holes here.\n";
$exit(1);
}
}
newspaper(ACTION) = Proc()
{
If (Verb == read) {
"\t\t\tDAILY GNUS\n"
"Vol 2.\t\t\t25 AUGUST\n"
"\n"
"Spies in the far reaches of the Museum have reported that new "
"construction is now taking place.\n"
"\n"
"Dungeon consultant Mr. Mctesq has recently waved his magic wand "
"over the aardvark museum. The following things should be brought "
"to light:\n"
"\tThe commands SAVE, RESTORE, and SHELL exist and work.\n"
"\tENTER is a verb, but IN is a preposition.\n"
"\n"
"Again, Adventurers are reminded that restocking of the museum "
"sections will be greatly rewarded.\n"
"\n";
$exit(1);
}
}
crack(ACTION) = Proc()
{
If (Verb == jamb) {
"The only climbable cracks in this place are A4.\n";
$exit(1);
}
"I can't figure that out. I'm not as smart as I am cracked up to be.\n";
$exit(1);
}
shaft(ACTION) = Proc()
{
If (Verb == jamb) {
"Try jamb crack (How do you jamb a shaft?)\n";
$exit(1);
}
Else If ((Verb == drop) & (Iobj == shaft)) {
Iobj = hole;
hole.ACTION();
}
}