extern void object::Attack( )
{
	int		list[];
	int		i;
	object	p;
	float	dist, prox;
	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++] = Thumper;
	list[i++] = PhazerShooter;
	list[i++] = Recycler;
	list[i++] = Shielder;
	list[i++] = Subber;
	list[i++] = Me;
	list[i++] = Derrick;
	list[i++] = BotFactory;
	list[i++] = PowerStation;
	list[i++] = Converter;
	list[i++] = RepairCenter;
	list[i++] = DefenseTower;
	list[i++] = AlienNest;
	list[i++] = ResearchCenter;
	list[i++] = RadarStation;
	list[i++] = ExchangePost;
	list[i++] = PowerPlant;
	list[i++] = AutoLab;
	list[i++] = NuclearPlant;

	while ( true )
	{
		p = radar(list, 0, 360, 0, 30);
		if ( p == null )
		{
			wait(2);
		}
		else
		{
			dist = distance(p.position, position);
			if ( dist <= 10 )
			{
				fire();
			}
			else
			{
				prox = dist-5;
				if ( prox > 25 )  prox = 25;
				dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
				dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
				dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
				goto(dest);
			}
		}
	}
}
