/usr/share/games/colobot/ai/antt41.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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | extern void object::Attack( )
{
int list[], i; // liste des objets cherchés
object target; // info sur la cible
object queen; // info sur la reine
point center; // coordonnées du centre de la zone
float distCent; // rayon de la zone
float r; // valeur aléatoire
int ifTarget; // si on a trouvé une cible et quel genre
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 = -65; // prend les coordonnée
center.y = 255; // du centre de la zone
center.z = 0; // à patrouiller
distCent = 140; // rayon de la zone
motor(1,1); // en avant toute
ifTarget = 0; // pas de cible précise
while ( true ) // répète à l'infini
{
queen = radar(AlienQueen);
if (rand() < 0.2 and queen != null) ifTarget = 2;//on retourne vers la reine
if (queen == null and ifTarget == 2) ifTarget = 0;
target = radar(list, 0, 360, 0, 40);
if (target != null)
{
shoot(target.position);
}
else
{
if (ifTarget == 2)
{
if(distance2d(position, queen.position)>8) head(queen.position);
else ifTarget = 0;
}
else Random(center, distCent);
}
}
}
void object::head(point tarPos)
{
float mp;// puissance du moteur
mp = direction(tarPos)/180;
//if (mp>1) mp = 1;
//if (mp<-1) mp = -1;
if (mp>0)
{
motor(1-mp,1);
}
else
{
motor(1,1+mp);
}
wait(1);
}
void object::Random(point center, float distCent)
{
if (distance2d(position, center) > distCent or topo(position)<2)
{
HorsZone(center, distCent);
}
else
{
DansZone();
}
}
void object::HorsZone(point center, float distCent)
{ // si la fourmi est en dehors de la zone
motor(0, 0); //s'arrête
wait(0.5); //marque un arrêt
motor (-0.5, -0.5);//recule lentement
wait (1.5); //attend qu'ait reculé
turn(direction(center));
motor (1, 1); //puis en avant toute
do
{
wait(1); //tant que pas dans la zone
}
while (distance2d(position, center) > distCent or topo(position)<2);
}
void object::DansZone()
{ //si elle est bien dans la zone
float r = rand();
if (r > 0.6)
{ //dans un cas sur dix
motor (1, 0.7); // tourne à droite
wait(rand()*3); // pendant un moment
motor (1, 1); // puis tout droit
}
if (r < 0.4)
{ //dans un cas sur dix
motor (0.7, 1); // tourne à gauche
wait(rand()*3); // pendant un moment
motor (1, 1); // puis tout droit
}
motor(1,1);
wait(1); // attend un moment
}
void object::shoot(point tarPos)
{ // si cible à proximité
turn(direction(tarPos));
fire(tarPos); // tourne vers la cible
fire(tarPos); // et tire deux fois
motor(1,1); // avance
wait(1.5); // pendant 1.5 s
}
|