This file is indexed.

/usr/share/games/colobot/ai/anticv.txt is in colobot-common 0.1.6-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
extern void object::Attack( )
{
	int     list[], i;  // liste des objets cherchés
	object  target;     // info sur la cible
	point   center;     // coordonnées du centre de la zone
	point   lastPos;    // dernière position (pr test si bloquée)
	float   distCent;   // rayon de la zone
	float   r;          // valeur aléatoire
	float   mp;         // vitesse maxi
	float   minAlt;     // altitude minimale (danger lave!)

	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;

	center.x = cmdline(0);  // prend les coordonnée
	center.y = cmdline(1);  // du centre de la zone
	center.z = 0;           // à patrouiller
	distCent = cmdline(2);  // rayon de la zone
	mp = 0.4;
	minAlt = cmdline(3);

	lastPos = position;  // initialise
	motor(mp, mp);       // en avant toute
	while ( true )       // répère à l'infini
	{
		target = radar(list, 0, 360, 0, 40);
		if (target == null or topo(position)<minAlt)// pas de cible à proximité
		{                                      // ou pieds dans l'eau
			if (distance2d(position, center) > distCent or topo(position)<minAlt)
			{   // si la fourmi est en dehors de la zone
				motor(0, 0); //s'arrête
				wait(0.5);   //marque un arrêt
				motor (-0.4, -0.4);//recule lentement
				wait (1.5);  //attend qu'ait reculé
				turn(direction(center));
				motor (mp, mp); //puis en avant toute
				do 
				{
					lastPos = position;
					wait(0.5); //tant que pas dans la zone
					if (distance2d(lastPos, position) < 0.1)
					{   //si elle est bloquée par obstacle
						turn(rand()*360-180);
						motor(mp, mp);
						wait(0.5);
						turn(direction(center));
					}
				}
				while (distance2d(position, center) > distCent or topo(position)<minAlt);
			}
			else
			{   //si elle est bien dans la zone
				if (distance2d(lastPos, position) < 0.1)
				{   //si elle est bloquée par obstacle
					turn(rand()*360-180);
					motor(mp, mp);
					wait(0.5);
				}
				r = rand();
				if (r > 0.6)
				{  //dans un cas sur dix
					motor (mp, mp*0.5);// tourne à droite
					wait(rand()*2);// pendant un moment
					motor (mp, mp);  // puis tout droit
				}
				if (r < 0.4)
				{   //dans un cas sur dix
					motor (mp*0.5, mp);// tourne à gauche
					wait(rand()*2);// pendant un moment
					motor (mp, mp);  // puis tout droit
				}
				lastPos = position;
				if(r>0.4 and r<0.6) wait(1);//attend un moment
			}
		}
		else
		{   // si cible à proximité
			turn(direction(target.position));
			fire(target.position); // tourne vers la cible
		}
	}
}