diff -r 4144204da077 -r 8dd71d960cbc hedgewars/uAIMisc.pas --- a/hedgewars/uAIMisc.pas Thu May 08 22:44:05 2008 +0000 +++ b/hedgewars/uAIMisc.pas Fri May 09 12:58:10 2008 +0000 @@ -49,11 +49,12 @@ var ThinkingHH: PGear; Targets: TTargets; - + implementation -uses uTeams, uMisc, uLand, uCollisions; +uses uTeams, uMisc, uLand, uCollisions, uconsole; const KillScore = 200; MAXBONUS = 1024; + friendlyfactor: Longword = 300; type TBonus = record X, Y: LongInt; @@ -70,25 +71,39 @@ procedure FillTargets; var i, t: Longword; + f, e: Longword; begin Targets.Count:= 0; +f:= 0; +e:= 0; for t:= 0 to Pred(TeamsCount) do - with TeamsArray[t]^ do - begin - for i:= 0 to cMaxHHIndex do - if (Hedgehogs[i].Gear <> nil) - and (Hedgehogs[i].Gear <> ThinkingHH) then - begin - with Targets.ar[Targets.Count], Hedgehogs[i] do - begin - Point.X:= hwRound(Gear^.X); - Point.Y:= hwRound(Gear^.Y); - if Clan <> CurrentTeam^.Clan then Score:= Gear^.Health - else Score:= -Gear^.Health - end; - inc(Targets.Count) - end; - end + with TeamsArray[t]^ do + begin + for i:= 0 to cMaxHHIndex do + if (Hedgehogs[i].Gear <> nil) + and (Hedgehogs[i].Gear <> ThinkingHH) then + begin + with Targets.ar[Targets.Count], Hedgehogs[i] do + begin + Point.X:= hwRound(Gear^.X); + Point.Y:= hwRound(Gear^.Y); + if Clan <> CurrentTeam^.Clan then + begin + Score:= Gear^.Health; + inc(e) + end else + begin + Score:= -Gear^.Health; + inc(f) + end + end; + inc(Targets.Count) + end; + end; + +if e > f then friendlyfactor:= 300 + (e - f) * 30 +else friendlyfactor:= max(30, 300 - f * 80 div e); +writelntoconsole('e:' +inttostr(e) + ' f:' + inttostr(f) + ' ff:'+ inttostr(friendlyfactor)) end; procedure FillBonuses(isAfterAttack: boolean); @@ -185,10 +200,10 @@ dmg:= dmg shr 1; if dmg >= abs(Score) then if Score > 0 then inc(Result, KillScore) - else dec(Result, KillScore * 3) + else dec(Result, KillScore * friendlyfactor div 100) else if Score > 0 then inc(Result, dmg) - else dec(Result, dmg * 3) + else dec(Result, dmg * friendlyfactor div 100) end; end; RateExplosion:= Result * 1024 @@ -206,10 +221,10 @@ begin if power >= abs(Score) then if Score > 0 then inc(Result, KillScore) - else dec(Result, KillScore * 3) + else dec(Result, KillScore * friendlyfactor div 100) else if Score > 0 then inc(Result, power) - else dec(Result, power * 3) + else dec(Result, power * friendlyfactor div 100) end; end; RateShove:= Result * 1024 @@ -235,10 +250,10 @@ begin if dmg >= abs(Score) then if Score > 0 then inc(Result, KillScore) - else dec(Result, KillScore * 3) + else dec(Result, KillScore * friendlyfactor div 100) else if Score > 0 then inc(Result, dmg) - else dec(Result, dmg * 3) + else dec(Result, dmg * friendlyfactor div 100) end; end; RateShotgun:= Result * 1024