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; |