/*
Source code for Lulu the UberMud radio controlled tank.
Marcus J. Ranum, 1990.
*/
/*
hard-coded object numbers - very gauche, but what the hell...
*/
#define TANKNUM #244
#define CONTNUM #245
/* shut it off */
TANKNUM.onoff = NULL;
TANKNUM.jetson = NULL;
/* describe the little beauty */
TANKNUM.dsc = "a small radio controlled tank, with fairly complicated electronics on it. it has little tracks, stubby jet engines, and a large array of sensors adorning its turret. the whole thing is painted bright pink.";
/* describe the controller */
CONTNUM.dsc = "the control unit has a pair of levers, a small digital read-out, and several large buttons. there is a small label on the back, with 'instructions' in large letters.";
/* controller instructions */
CONTNUM.txt = "operations: tankbeep tankon, tankoff, tankgo <dir>, tanklook";
/* tank's name */
TANKNUM.txt = "the tank's name, Lulu, is written in scrollwork on the turret";
/* tank's "you need the controller" message */
TANKNUM.err = "you need the controller, bozo.\n";
/* turn the tank on */
func CONTNUM.tankon
{
@.emote("pushes a green button on",#self.nam);
TANKNUM.on();
}
chmod(&CONTNUM.tankon,"O:rw,W:rs");
/* turn the tank off */
func CONTNUM.tankoff
{
@.emote("pushes a red button on",#self.nam);
TANKNUM.off();
}
chmod(&CONTNUM.tankoff,"O:rw,W:rs");
/* turn on the jet engines */
func CONTNUM.tankjets
{
@.emote("flips a black lever on",#self.nam);
TANKNUM.tankjets();
}
chmod(&CONTNUM.tankjets,"O:rw,W:rs");
/* beep Lulu's horn */
func CONTNUM.tankbeep
{
@.emote("pushes a little orange button on",#self.nam);
TANKNUM.beep();
}
/* tell the tank to move */
func CONTNUM.tankgo
{
@.emote("fiddles with the control sticks on",#self.nam);
TANKNUM.go($1);
}
/* tell the tank to look around */
func CONTNUM.tanklook
{
@.emote("peers at the little screen on",#self.nam);
TANKNUM.look();
}
/* turn the tank on */
func TANKNUM.on
{
/* do not work unless called by the control box */
if(#caller != CONTNUM) {
echo(TANKNUM.err);
return;
}
/* on/off switch */
if(#self.onoff == NULL) {
echo("a status bar on the controller lights up.\n");
#self.onoff = 1;
if(#self._loc != NULL) {
@._announce(#self.nam,"whirrs to life. little headlights pop from the hull.");
}
return;
}
echo("the tank is already on\n");
}
chmod(&TANKNUM.on,"O:rw,W:rs");
/* turn the tank off */
func TANKNUM.off
{
if(#caller != CONTNUM) {
echo(TANKNUM.err);
return;
}
if(#self.onoff == 1) {
echo("the status bar on the controller goes out.\n");
#self.onoff = NULL;
if(#self._loc != NULL) {
@._announce(#self.nam,"powers down. little headlights shut off and retract into the hull.");
}
return;
}
echo("the tank is already off\n");
}
chmod(&TANKNUM.off,"O:rw,W:rs");
/* move the tank. make some checks, etc. */
func TANKNUM.go
{
/* do not work unless called by the control box */
if(#caller != CONTNUM) {
echo("you need the control unit, bozo\n");
return;
}
/* on/off switch */
if(#self.onoff == NULL) {
echo("the tank just sits there\n");
return;
}
/* make some noise */
if(#self._loc != NULL) {
if(#self.jetson)
@._announce(#self.nam,"pivots on a column of air, and a screech of jet engines");
else
@._announce(#self.nam,"pivots and starts to move");
}
/* try to go */
if($1 == NULL || @._objgo($1) != 1) {
echo("a message appears on the control unit: move failed\n");
if(#self._loc != NULL) {
if(#self.jetson)
@._announce(#self.nam,
"screams around the room, and resumes hovering");
else
@._announce(#self.nam,
"makes a whirring noise and grinds to a halt");
}
return;
}
/* made it! */
echo("a message appears on the control unit: in ",#self._loc.nam,"\n");
}
/* look from the tank */
func TANKNUM.look
{
/* do not work unless called by the control box */
if(#caller != CONTNUM) {
echo(TANKNUM.err);
return;
}
/* on/off switch */
if(#self.onoff == NULL) {
echo("the tank just sits there\n");
return;
}
if(#self._loc != NULL) {
@._announce(#self.nam,"pivots and scans the room with a bewildering array of little scanners");
echo("the control unit screen reads:\n--report--\nExits:");
foreach $xit in (#self._loc.ex)
echo($xit.nam," ");
echo("\nPeople:");
foreach $xit in (#self._loc._ply)
echo($xit.nam," ");
echo("\n--end-report--\n");
return;
}
echo("a message appears on the control unit: where the fuck am I?\n");
}
/* beep the horn. */
func TANKNUM.beep
{
/* do not work unless called by the control box */
if(#caller != CONTNUM) {
echo(TANKNUM.err);
return;
}
/* on/off switch */
if(#self.onoff == NULL)
return;
if(#self._loc != NULL)
@._announce(#self.nam,"goes: \"BEEP! BEEP!\"");
}
/* turn the tank jets on */
func TANKNUM.tankjets
{
/* do not work unless called by the control box */
if(#caller != CONTNUM) {
echo(TANKNUM.err);
return;
}
/* on/off switch */
if(#self.jetson == NULL) {
echo("a status bar on the controller lights up.\n");
#self.jetson = 1;
if(#self._loc != NULL) {
@._announce(#self.nam,"spins up the jet engines with a banshee howl... it hovers several feet in the air, in a cloud of dust, and balances, rocking slightly.");
}
return;
} else {
echo("a status bar on the controller goes out.\n");
#self.jetson = NULL;
if(#self._loc != NULL) {
@._announce(#self.nam,"spins down the jet engines, sinking to the ground gently in a cloud of dust.");
}
}
}
chmod(&TANKNUM.tankjets,"O:rw,W:rs");