hedgewars/uAIAmmoTests.pas
changeset 15618 99fe21754b3f
parent 15617 e21285b7c5e6
child 15619 92ce801d0681
equal deleted inserted replaced
15617:e21285b7c5e6 15618:99fe21754b3f
    54 function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    54 function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    55 function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    55 function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    56 function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    56 function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    57 function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    57 function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    58 function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    58 function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
       
    59 function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    59 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    60 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    60 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    61 function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    61 function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    62 function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    62 function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    63 function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    63 function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
    64 function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
   120             (proc: nil;              flags: 0), // amPortalGun
   121             (proc: nil;              flags: 0), // amPortalGun
   121             (proc: @TestPiano;       flags: amtest_Rare), // amPiano
   122             (proc: @TestPiano;       flags: amtest_Rare), // amPiano
   122             (proc: @TestGrenade;     flags: amtest_NoTrackFall), // amGasBomb
   123             (proc: @TestGrenade;     flags: amtest_NoTrackFall), // amGasBomb
   123             (proc: @TestShotgun;     flags: 0), // amSineGun
   124             (proc: @TestShotgun;     flags: 0), // amSineGun
   124             (proc: nil;              flags: 0), // amFlamethrower
   125             (proc: nil;              flags: 0), // amFlamethrower
   125             (proc: @TestGrenade;     flags: 0), // amSMine
   126             (proc: @TestSMine;       flags: 0), // amSMine
   126             (proc: @TestHammer;      flags: amtest_NoTarget), // amHammer
   127             (proc: @TestHammer;      flags: amtest_NoTarget), // amHammer
   127             (proc: nil;              flags: 0), // amResurrector
   128             (proc: nil;              flags: 0), // amResurrector
   128             (proc: @TestDrillStrike; flags: amtest_Rare), // amDrillStrike
   129             (proc: @TestDrillStrike; flags: amtest_Rare), // amDrillStrike
   129             (proc: nil;              flags: 0), // amSnowball
   130             (proc: nil;              flags: 0), // amSnowball
   130             (proc: nil;              flags: 0), // amTardis
   131             (proc: nil;              flags: 0), // amTardis
  1644 if valueResult <= 0 then
  1645 if valueResult <= 0 then
  1645     valueResult:= BadTurn;
  1646     valueResult:= BadTurn;
  1646 TestMineStrike:= valueResult;
  1647 TestMineStrike:= valueResult;
  1647 end;
  1648 end;
  1648 
  1649 
       
  1650 function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
       
  1651 const timeLimit = 50;
       
  1652 var Vx, Vy, r, meX, meY: real;
       
  1653     rTime: LongInt;
       
  1654     EX, EY: LongInt;
       
  1655     valueResult: LongInt;
       
  1656     targXWrap, x, y, dX, dY: real;
       
  1657     t: LongInt;
       
  1658     value: LongInt;
       
  1659 begin
       
  1660 Flags:= Flags; // avoid compiler hint
       
  1661 meX:= hwFloat2Float(Me^.X);
       
  1662 meY:= hwFloat2Float(Me^.Y);
       
  1663 ap.Time:= 0;
       
  1664 rTime:= 350;
       
  1665 ap.ExplR:= 0;
       
  1666 if (WorldEdge = weWrap) then
       
  1667     if (Targ.Point.X < meX) then
       
  1668          targXWrap:= Targ.Point.X + (RightX-LeftX)
       
  1669     else targXWrap:= Targ.Point.X - (RightX-LeftX);
       
  1670 valueResult:= BadTurn;
       
  1671 repeat
       
  1672     rTime:= rTime + 300 + Level * 50 + random(300);
       
  1673     if (WorldEdge = weWrap) and (random(2)=0) then
       
  1674          Vx:= (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime
       
  1675     else
       
  1676          Vx:= (Targ.Point.X + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime;
       
  1677     Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime;
       
  1678     r:= sqr(Vx) + sqr(Vy);
       
  1679 
       
  1680     if not (r > 1) then
       
  1681         begin
       
  1682         x:= meX;
       
  1683         y:= meY;
       
  1684         dX:= Vx;
       
  1685         dY:= -Vy;
       
  1686         t:= rTime;
       
  1687         repeat
       
  1688             x:= CheckWrap(x);
       
  1689             x:= x + dX;
       
  1690 
       
  1691             y:= y + dY;
       
  1692             dY:= dY + cGravityf;
       
  1693             dec(t)
       
  1694         until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 2)) or
       
  1695                ((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 2))) or (t < -timeLimit);
       
  1696 
       
  1697         EX:= trunc(x);
       
  1698         EY:= trunc(y);
       
  1699 
       
  1700         if t >= -timeLimit then
       
  1701             if (Level = 1) and (Flags and amtest_NoTrackFall = 0) then
       
  1702                 value:= RateExplosion(Me, EX, EY, 61, afTrackFall)
       
  1703             else
       
  1704                 value:= RateExplosion(Me, EX, EY, 61);
       
  1705 
       
  1706         if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then
       
  1707             value := BadTurn;
       
  1708 
       
  1709         if (valueResult < value) or ((valueResult = value) and (Level < 3)) then
       
  1710             begin
       
  1711             ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9));
       
  1712             ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1);
       
  1713             ap.ExplR:= 60;
       
  1714             ap.ExplX:= EX;
       
  1715             ap.ExplY:= EY;
       
  1716             valueResult:= value
       
  1717             end;
       
  1718         end
       
  1719 until rTime > 5050 - Level * 800;
       
  1720 TestSMine:= valueResult
       
  1721 end;
       
  1722 
  1649 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
  1723 function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt;
  1650 const BOUNCES = 5;
  1724 const BOUNCES = 5;
  1651 var X, Y: real;
  1725 var X, Y: real;
  1652     dmg: array[0..BOUNCES-1] of LongInt;
  1726     dmg: array[0..BOUNCES-1] of LongInt;
  1653     i, e, rate, valueResult: LongInt;
  1727     i, e, rate, valueResult: LongInt;