home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 51 / PCGamer51_17Demos.iso / games / colobotdemo / colobotdemo10e.exe / script / worm02.txt < prev    next >
Text File  |  2001-06-10  |  3KB  |  112 lines

  1. extern void object::Attack( )
  2. {
  3.     int     list[];
  4.     int     i;
  5.     object  p;
  6.     float   dim, dist, prox;
  7.     point   nav1, nav2, nav3, nav4, dest, center;
  8.  
  9.     errmode(0);  // ne stoppe pas si erreur
  10.     while ( ismovie() != 0 )  wait(1);
  11.  
  12.     i = 0;
  13.     list[i++] = WingedGrabber;
  14.     list[i++] = TrackedGrabber;
  15.     list[i++] = WheeledGrabber;
  16.     list[i++] = LeggedGrabber;
  17.     list[i++] = WingedShooter;
  18.     list[i++] = TrackedShooter;
  19.     list[i++] = WheeledShooter;
  20.     list[i++] = LeggedShooter;
  21.     list[i++] = WingedOrgaShooter;
  22.     list[i++] = TrackedOrgaShooter;
  23.     list[i++] = WheeledOrgaShooter;
  24.     list[i++] = LeggedOrgaShooter;
  25.     list[i++] = WingedSniffer;
  26.     list[i++] = TrackedSniffer;
  27.     list[i++] = WheeledSniffer;
  28.     list[i++] = LeggedSniffer;
  29.     list[i++] = Thumper;
  30.     list[i++] = PhazerShooter;
  31.     list[i++] = Recycler;
  32.     list[i++] = Shielder;
  33.     list[i++] = Subber;
  34.     list[i++] = RadarStation;
  35. //    list[i++] = DefenseTower;
  36.  
  37.     while ( true )
  38.     {
  39.         p = TargetSearch(list);  // cherche cible
  40.         if ( p == null )
  41.         {
  42.             dim = 1+rand()*2;
  43.             nav1.x = position.x+dim;
  44.             nav1.y = position.y+dim;
  45.             nav2.x = position.x+dim;
  46.             nav2.y = position.y-dim;
  47.             nav3.x = position.x-dim;
  48.             nav3.y = position.y-dim;
  49.             nav4.x = position.x-dim;
  50.             nav4.y = position.y+dim;
  51.  
  52.             while ( true )
  53.             {
  54.                 goto(nav1);
  55.                 p = TargetSearch(list);
  56.                 if ( p != null )  break;
  57.  
  58.                 goto(nav2);
  59.                 p = TargetSearch(list);
  60.                 if ( p != null )  break;
  61.  
  62.                 goto(nav3);
  63.                 p = TargetSearch(list);
  64.                 if ( p != null )  break;
  65.  
  66.                 goto(nav4);
  67.                 p = TargetSearch(list);
  68.                 if ( p != null )  break;
  69.             }
  70.         }
  71.         else
  72.         {
  73.             dist = distance(p.position, position);
  74.             prox = dist/2;  // on se rapproche
  75.             if ( prox < 2.5 )
  76.             {
  77.                 dest.x = position.x+(rand()-0.5)*8;
  78.                 dest.y = position.y+(rand()-0.5)*8;
  79.                 dest.z = position.z;
  80.             }
  81.             else
  82.             {
  83.                 dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
  84.                 dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
  85.                 dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
  86.             }
  87.             goto(dest);  // va sur la cible
  88.         }
  89.     }
  90. }
  91.  
  92. // Cherche une cible sur l'εle. Si la cible est plus loin,
  93. // elle est ignorΘe.
  94.  
  95. object object::TargetSearch(int[] list)
  96. {
  97.     object  p;
  98.     point   center;
  99.     float   dist;
  100.  
  101.     p = radar(list);
  102.     if ( p == null )  return null;
  103.  
  104.     center.x = 0;
  105.     center.y = 100;  // sommet de l'εle
  106.     center.z = p.position.z;
  107.     dist = distance(p.position, center);
  108.     if ( dist > 80 )  return null;  // ignore si trop loin
  109.  
  110.     return p;
  111. }
  112.