/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
}
}
}
|