/*** 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();
    }
}