extern void object::Attack( )
{
	int		list[], i;
	object	p;
	float	dist;
	point	dest;

	errmode(0);  // ne stoppe pas si erreur
	while ( ismovie() != 0 )  wait(1);

	i = 0;
	list[i++] = WingedGrabber;
	list[i++] = TrackedGrabber;
	list[i++] = WheeledGrabber;
	list[i++] = LeggedGrabber;
	list[i++] = WingedShooter;
	list[i++] = TrackedShooter;
	list[i++] = WheeledShooter;
	list[i++] = LeggedShooter;
	list[i++] = WingedOrgaShooter;
	list[i++] = TrackedOrgaShooter;
	list[i++] = WheeledOrgaShooter;
	list[i++] = LeggedOrgaShooter;
	list[i++] = WingedSniffer;
	list[i++] = TrackedSniffer;
	list[i++] = WheeledSniffer;
	list[i++] = LeggedSniffer;
	list[i++] = WingedBuilder;
	list[i++] = TrackedBuilder;
	list[i++] = WheeledBuilder;
	list[i++] = LeggedBuilder;
	list[i++] = Thumper;
	list[i++] = PhazerShooter;
	list[i++] = Recycler;
	list[i++] = Shielder;
	list[i++] = Subber;
	list[i++] = TargetBot;
	list[i++] = Me;
	list[i++] = Derrick;
	list[i++] = BotFactory;
	list[i++] = PowerStation;
	list[i++] = Converter;
	list[i++] = RepairCenter;
	list[i++] = DefenseTower;
	list[i++] = ResearchCenter;
	list[i++] = RadarStation;
	list[i++] = ExchangePost;
	list[i++] = PowerPlant;
	list[i++] = AutoLab;
	list[i++] = NuclearPlant;
	list[i++] = Titanium;
	list[i++] = PowerCell;
	list[i++] = NuclearCell;

	while ( true )
	{
		if ( load == null )  // ne porte rien ?
		{
			p = radar(OrgaMatter);  // cherche matière
			if ( p == null )
			{
				jet(1);  // monte
				dest = position;
				dest.x += (rand()-0.5)*10;
				dest.y += (rand()-0.5)*10;
				goto(dest);  // va n'importe où
				wait(2);
			}
			else
			{
				dest = p.position;
				dest.z = position.z;
				dist = distance(dest, position);
				if ( dist > 1.25 )
				{
					jet(1);  // monte
					goto(p.position);  // va sur le matière
				}
				else
				{
					jet(-1);  // descend
					while ( altitude > 0 );
					grab();  // prend la matière
				}
			}
		}
		else  // porte matière ?
		{
			jet(1);  // monte
			p = radar(list, 0, 360, 0, 1000, 1, FilterOnlyLanding);
			if ( p == null )
			{
				dest = position;
				dest.x += (rand()-0.5)*10;
				dest.y += (rand()-0.5)*10;
				goto(dest);  // va n'importe où
				wait(2);
			}
			else
			{
				dest = p.position;
				dest.z = position.z;
				dist = distance(dest, position);
				if ( dist > 1.25 )
				{
					goto(p.position);  // va sur la cible
				}
				else
				{
					drop();  // lâche la matière
				}
			}
		}
	}
}
