home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume18 / xmpb / part07 / harry.npc < prev    next >
Text File  |  1993-07-12  |  2KB  |  177 lines

  1. NPC
  2. Name = Harry
  3. Ship = Buster
  4. EnergyMax = 1000
  5. LShieldMax = 600
  6. RShieldMax = 600
  7. BShieldMax = 400
  8. Solar = 2
  9. ShortRange = 1
  10. Engine = 3
  11. Repair = 2
  12. LongRange = 1
  13.  
  14. Weapons 
  15. Pulse
  16.  
  17. var 
  18.     lastangle
  19.     lastdist
  20.     repairitem
  21. end
  22.  
  23. State start
  24. {
  25.     repairitem = 7;
  26.     set B2 = 1;
  27.  
  28.     -> watch;
  29. }
  30.  
  31. State watch
  32. {
  33.     if(LongState < 90 )    
  34.     {
  35.         if(Speed > 5) 
  36.             -> stop;
  37.         repairitem = LongRange;
  38.         repair();
  39.     }
  40.     set B1 = 0;
  41.     NumEnemies > 0 -> spotted;
  42.     repair();
  43. }
  44.  
  45. State spotted
  46. {
  47.     set SelectEnemy = 0;
  48.     lastangle = EnemyAngle;
  49.     lastdist = EnemyDist;
  50.  
  51.     -> fight;
  52. }
  53.  
  54. Proc gonna_hit
  55. {
  56.     if(XVel*XPos > 45000) return 1;
  57.     if(YVel*YPos > 45000) return 1;
  58.  
  59.     return 0;
  60. }
  61.  
  62. State fight
  63. {
  64.     var
  65.         d
  66.         a
  67.         m
  68.         i
  69.         acc
  70.         mina
  71.         maxa
  72.     end
  73.  
  74.     !EnemyAvail -> watch;
  75.  
  76.     m = EnemyDist/(50+VelAtAngle(Angle)) - 1;
  77.  
  78.     if(Energy > 200 || gonna_hit())
  79.         set B3 = 1;
  80.     else
  81.         set B3 = 0;
  82.  
  83.     a = AngleTo(EnemyXPos+m*EnemyXVel-m*XVel,EnemyYPos+m*EnemyYVel-m*YVel);
  84.  
  85.     d = (Angle -a + 360)%360;
  86.  
  87.     if(d < 170 || d > 190)
  88.         set TurnTo = a;
  89.  
  90.     if(EnemyDist < 100)
  91.         acc = 30;
  92.     else
  93.     if(EnemyDist < 200)
  94.         acc = 6;
  95.     else
  96.     if(EnemyDist < 500)
  97.         acc = 3;
  98.     else
  99.         acc = 2;
  100.  
  101.     maxa = (a+acc)%360;
  102.     mina = (a+360-acc)%360;
  103.  
  104.     if(EnemyDist < 1000 && EnemyDist > 0 &&(Angle - 360 < maxa && Angle > mina))
  105.     {
  106.         set B1 = 1;
  107.     }
  108.     else
  109.         set B1 = 0;
  110.  
  111.     set Balance = 1;
  112.     repair();
  113.  
  114.     Speed > 90 -> stop;
  115. }
  116.  
  117. State stop
  118. {
  119.     set B3 = 0;
  120.     set B1 = 0;
  121.     while(Angle != ((Direction + 180)%360))
  122.         set TurnTo = (Direction + 180)%360;
  123.     while(Speed > 4 && (EnemyDist > 500 || EnemyDist == 0))
  124.     {
  125.         set TurnTo = (Direction + 180)%360;
  126.         set B3 = 1;
  127.     }
  128.     set B3 = 0;
  129.     -> watch;
  130. }
  131.  
  132. Proc repair
  133. {
  134.     var 
  135.         r
  136.     end
  137.  
  138.     if(repairitem == RepairItem && repairitem != 7) return;
  139.     r = RepairItem;
  140.     set RepairToggle = 1;
  141.     while(RepairItem != repairitem && RepairItem != r)
  142.         set RepairToggle = 1;
  143.     if(RepairItem == r) 
  144.     {
  145.         if(LongState < 100 && LongState != -1 && repairitem != LongRange)
  146.         {
  147.             repairitem = LongRange;
  148.             return;
  149.         }
  150.         if(SolarState < 100 && SolarState != -1 && repairitem != Solar)
  151.         {
  152.             repairitem = Solar;
  153.             return;
  154.         }
  155.         if(RepairState < 100 && RepairState != -1 && repairitem != Repair)
  156.         {
  157.             repairitem = Repair;
  158.             return;
  159.         }
  160.         if(EngineState < 100 && EngineState != -1 && repairitem != Engine)
  161.         {
  162.             repairitem = Engine;
  163.             return;
  164.         }
  165.         if(ShortState < 100 && ShortState != -1 && Energy > 300)
  166.         {
  167.             repairitem = Engine;
  168.             return;
  169.         }
  170.         repairitem = 7;
  171.     }
  172.     return;
  173. }
  174.  
  175.     
  176. Start start
  177.