--- a/hedgewars/uAIMisc.pas Sun Jan 19 00:18:28 2014 +0400
+++ b/hedgewars/uAIMisc.pas Tue Jan 21 22:38:13 2014 +0100
@@ -53,7 +53,17 @@
X, Y: LongInt;
Radius: LongInt;
Score: LongInt;
- end;
+ end;
+
+Tbonuses = record
+ Count : Longword;
+ ar : array[0..Pred(MAXBONUS)] of TBonus;
+ end;
+
+Twalkbonuses = record
+ Count: Longword;
+ ar: array[0..Pred(MAXBONUS div 8)] of TBonus; // don't use too many
+ end;
procedure initModule;
procedure freeModule;
@@ -82,22 +92,16 @@
var ThinkingHH: PGear;
Targets: TTargets;
- bonuses: record
- Count: Longword;
- ar: array[0..Pred(MAXBONUS)] of TBonus;
- end;
+ bonuses: Tbonuses;
- walkbonuses: record
- Count: Longword;
- ar: array[0..Pred(MAXBONUS div 8)] of TBonus; // don't use too many
- end;
+ walkbonuses: Twalkbonuses;
const KillScore = 200;
var friendlyfactor: LongInt = 300;
var dmgMod: real = 1.0;
implementation
-uses uCollisions, uVariables, uUtils, uLandTexture, uGearsUtils;
+uses uCollisions, uVariables, uUtils, uGearsUtils;
var
KnownExplosion: record
@@ -127,13 +131,13 @@
if (((Gear^.Kind = gtHedgehog) and
(Gear <> ThinkingHH) and
(Gear^.Health > Gear^.Damage) and
- not(Gear^.Hedgehog^.Team^.hasgone)) or
+ (not Gear^.Hedgehog^.Team^.hasgone)) or
((Gear^.Kind = gtExplosives) and
(Gear^.Health > Gear^.Damage)) or
((Gear^.Kind = gtMine) and
(Gear^.Health = 0) and
(Gear^.Damage < 35))
- ) and
+ ) and
(Targets.Count < 256) then
begin
with Targets.ar[Targets.Count] do
@@ -155,7 +159,7 @@
Score:= Gear^.Damage - Gear^.Health;
inc(f)
end
- else
+ else
begin
Score:= Gear^.Health - Gear^.Damage;
inc(e)
@@ -163,7 +167,7 @@
end
else if Gear^.Kind = gtExplosives then
Score:= Gear^.Health - Gear^.Damage
- else if Gear^.Kind = gtMine then
+ else if Gear^.Kind = gtMine then
Score:= max(0,35-Gear^.Damage);
end;
inc(Targets.Count)
@@ -384,20 +388,20 @@
dmg := 1 + trunc((dY - 0.4) * 70);
exit(dmg)
end
- else
+ else
begin
dxdy:= abs(dX)+abs(dY);
- if ((Kind = gtMine) and (dxdy > 0.35)) or
- ((Kind = gtExplosives) and
+ if ((Kind = gtMine) and (dxdy > 0.35)) or
+ ((Kind = gtExplosives) and
(((State and gstTmpFlag <> 0) and (dxdy > 0.35)) or
- ((State and gstTmpFlag = 0) and
- ((abs(odX) > 0.15) or ((abs(odY) > 0.15) and
+ ((State and gstTmpFlag = 0) and
+ ((abs(odX) > 0.15) or ((abs(odY) > 0.15) and
(abs(odX) > 0.02))) and (dxdy > 0.35)))) then
begin
dmg := trunc(dxdy * 25);
exit(dmg)
end
- else if (Kind = gtExplosives) and not((abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then
+ else if (Kind = gtExplosives) and (not(abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then
begin
dmg := trunc(dy * 70);
exit(dmg)
@@ -436,20 +440,20 @@
dmg := trunc((dY - 0.4) * 70);
exit(dmg);
end
- else
+ else
begin
dxdy:= abs(dX)+abs(dY);
- if ((Kind = gtMine) and (dxdy > 0.4)) or
- ((Kind = gtExplosives) and
+ if ((Kind = gtMine) and (dxdy > 0.4)) or
+ ((Kind = gtExplosives) and
(((State and gstTmpFlag <> 0) and (dxdy > 0.4)) or
- ((State and gstTmpFlag = 0) and
- ((abs(odX) > 0.15) or ((abs(odY) > 0.15) and
+ ((State and gstTmpFlag = 0) and
+ ((abs(odX) > 0.15) or ((abs(odY) > 0.15) and
(abs(odX) > 0.02))) and (dxdy > 0.35)))) then
begin
dmg := trunc(dxdy * 50);
exit(dmg)
end
- else if (Kind = gtExplosives) and not((abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then
+ else if (Kind = gtExplosives) and (not(abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then
begin
dmg := trunc(dy * 70);
exit(dmg)
@@ -520,7 +524,7 @@
begin
dX:= (0.005 * dmg + 0.01) / Density;
dY:= dX;
- if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and
+ if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and
(((abs(dY) > 0.15) and (abs(dX) < 0.02)) or
((abs(dY) < 0.15) and (abs(dX) < 0.15))) then
dX:= 0;
@@ -606,8 +610,8 @@
pY:= Point.y-2;
fallDmg:= 0;
if (Flags and afSetSkip <> 0) then skip:= true;
- if not(dead) and (Flags and afTrackFall <> 0) and (Score > 0) and (power < Score) then
- if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and
+ if (not dead) and (Flags and afTrackFall <> 0) and (Score > 0) and (power < Score) then
+ if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and
(((abs(dY) > 0.15) and (abs(dX) < 0.02)) or
((abs(dY) < 0.15) and (abs(dX) < 0.15))) then
fallDmg:= trunc(TraceShoveFall(pX, pY, 0, dY, Targets.ar[i]) * dmgMod)
@@ -701,7 +705,7 @@
end;
if dmg > 0 then
begin
- if not(dead) and (Score > 0) and (dmg < Score) then
+ if (not dead) and (Score > 0) and (dmg < Score) then
begin
pX:= Point.x;
pY:= Point.y;
@@ -709,9 +713,9 @@
dY:= gdY * dmg / Density;
if dX < 0 then dX:= dX - 0.01
else dX:= dX + 0.01;
- if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and
+ if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and
(((abs(dY) > 0.15) and (abs(dX) < 0.02)) or
- ((abs(dY) < 0.15) and (abs(dX) < 0.15))) then
+ ((abs(dY) < 0.15) and (abs(dX) < 0.15))) then
dX:= 0;
if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and
(Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then