Some AI tweaks by imcold
authorunc0rr
Fri, 03 Apr 2009 16:38:16 +0000
changeset 1941 b1ef1f86148c
parent 1940 bbdca883b5f9
child 1942 4e092226956d
Some AI tweaks by imcold
hedgewars/uAIAmmoTests.pas
hedgewars/uAIMisc.pas
--- a/hedgewars/uAIAmmoTests.pas	Fri Apr 03 16:35:59 2009 +0000
+++ b/hedgewars/uAIAmmoTests.pas	Fri Apr 03 16:38:16 2009 +0000
@@ -288,14 +288,18 @@
 end;
 
 function TestShotgun(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
+const
+  MIN_RANGE =  80;
+  MAX_RANGE = 400;
 var Vx, Vy, x, y: hwFloat;
     rx, ry, Result: LongInt;
+    range: integer;
 begin
 ap.ExplR:= 0;
 ap.Time:= 0;
 ap.Power:= 1;
-if Metric(hwRound(Me^.X), hwRound(Me^.Y), Targ.X, Targ.Y) < 80 then
-   exit(BadTurn);
+range:= Metric(hwRound(Me^.X), hwRound(Me^.Y), Targ.X, Targ.Y);
+if ( range < MIN_RANGE ) or ( range > MAX_RANGE ) then exit(BadTurn);
 Vx:= (int2hwFloat(Targ.X) - Me^.X) * _1div1024;
 Vy:= (int2hwFloat(Targ.Y) - Me^.Y) * _1div1024;
 x:= Me^.X;
@@ -315,7 +319,7 @@
                    else dec(Result, Level * 4000);
      exit(Result)
      end
-until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x < _0) or (y < _0) or (x > _2048) or (y > _1024);
+until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x.isNegative) or (y.isNegative) or (x.Round > LAND_WIDTH) or (y.Round > LAND_HEIGHT);
 TestShotgun:= BadTurn
 end;
 
@@ -336,12 +340,14 @@
 y:= Me^.Y;
 ap.Angle:= DxDy2AttackAngle(Vx, -Vy);
 d:= 0;
+
 repeat
   x:= x + vX;
   y:= y + vY;
   if ((hwRound(x) and LAND_WIDTH_MASK) = 0)and((hwRound(y) and LAND_HEIGHT_MASK) = 0)
      and (Land[hwRound(y), hwRound(x)] <> 0) then inc(d);
-until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x < _0) or (y < _0) or (x > _2048) or (y > _1024) or (d > 200);
+until (Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 4) or (x.isNegative) or (y.isNegative) or (x.Round > LAND_WIDTH) or (y.Round > LAND_HEIGHT) or (d > 200);
+
 if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then Result:= max(0, (4 - d div 50) * 7 * 1024)
                                                            else Result:= BadTurn;
 TestDesertEagle:= Result
--- a/hedgewars/uAIMisc.pas	Fri Apr 03 16:35:59 2009 +0000
+++ b/hedgewars/uAIMisc.pas	Fri Apr 03 16:38:16 2009 +0000
@@ -237,6 +237,8 @@
 end;
 
 function RateShotgun(Me: PGear; x, y: LongInt): LongInt;
+const
+  REUSE_BONUS = 1.35;
 var i, dmg, Result: LongInt;
 begin
 Result:= 0;
@@ -252,14 +254,12 @@
     with Targets.ar[i] do
          begin
          dmg:= min(cHHRadius + cShotgunRadius - hwRound(DistanceI(Point.x - x, Point.y - y)), 25);
+         dmg := round(dmg * REUSE_BONUS);
          if dmg > 0 then
             begin
-            if dmg >= abs(Score) then
-               if Score > 0 then inc(Result, KillScore)
-                            else dec(Result, KillScore * friendlyfactor div 100)
-            else
-               if Score > 0 then inc(Result, dmg)
-                            else dec(Result, dmg * friendlyfactor div 100)
+                if dmg >= abs(Score) then dmg := KillScore;
+                if Score > 0 then inc(Result, dmg)
+                else dec(Result, dmg * friendlyfactor div 100);
             end;
          end;
 RateShotgun:= Result * 1024