diff -r b644f61e803f -r 56885ea29202 hedgewars/uAI.pas --- a/hedgewars/uAI.pas Mon Oct 09 18:26:44 2006 +0000 +++ b/hedgewars/uAI.pas Tue Oct 10 18:03:48 2006 +0000 @@ -114,8 +114,11 @@ isThinking:= false; exit end; + if ((Me.State and gstAttacked) = 0) then TestAmmos(Actions, Me); + AddAction(Actions, Me.Message, aim_push, 250); - AddAction(Actions, aia_WaitX, round(Me.X), 0); + if (Me.Message and gm_Left) <> 0 then AddAction(Actions, aia_WaitXL, round(Me.X), 0) + else AddAction(Actions, aia_WaitXR, round(Me.X), 0); AddAction(Actions, Me.Message, aim_release, 0); steps:= 0; @@ -123,12 +126,11 @@ begin if SDL_GetTicks - AIThinkStart > 3 then begin - writetoconsole(inttostr(SDL_GetTicks - AIThinkStart) + ' '); dec(Actions.Count, 3); Push(ticks, Actions, Me^, Me^.Message); exit end; - + CanGo:= HHGo(Me, @AltMe, GoInfo); inc(ticks, GoInfo.Ticks); if ticks > maxticks then break; @@ -157,17 +159,17 @@ exit end else if Rate < BaseRate then break; + if GoInfo.FallPix >= FallPixForBranching then + Push(ticks, Actions, Me^, Me^.Message xor 3); // aia_Left xor 3 = aia_Right + if ((Me.State and gstAttacked) = 0) and ((steps mod 4) = 0) then TestAmmos(Actions, Me); - if GoInfo.FallPix >= FallPixForBranching then - Push(ticks, Actions, Me^, Me^.Message xor 3); // aia_Left xor 3 = aia_Right end; until false end; procedure Think(Me: PGear); var BackMe, WalkMe: TGear; -// StartTicks: Longword; begin AIThinkStart:= SDL_GetTicks; BackMe:= Me^; @@ -183,12 +185,12 @@ BestActions.Count:= 0; AddAction(BestActions, aia_Skip, 0, 250); end; - Me.State:= Me.State and not gstHHThinking end end else else begin FillBonuses(true); - Walk(@WalkMe) + Walk(@WalkMe); + AddAction(BestActions, aia_Wait, GameTicks + 100, 100); end end; @@ -219,9 +221,11 @@ BestActions.Count:= 0; BestActions.Pos:= 0; BestActions.Score:= 0; +AddAction(BestActions, aia_Wait, GameTicks + 1500{ + Longword(random(1000))}, 1500); tmp:= random(2) + 1; Push(0, BestActions, Me^, tmp); Push(0, BestActions, Me^, tmp xor 3); +BestActions.Count:= 0; BestActions.Score:= Low(integer); Think(Me) @@ -230,8 +234,6 @@ procedure ProcessBot(FrameNo: Longword); const LastFrameNo: Longword = 0; begin -if FrameNo = LastFrameNo then exit; -LastFrameNo:= FrameNo; with CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog] do if (Gear <> nil) and ((Gear.State and gstHHDriven) <> 0) @@ -239,7 +241,11 @@ if not isThinking then if (BestActions.Pos >= BestActions.Count) then StartThink(Gear) else ProcessAction(BestActions, Gear) - else Think(Gear) + else if FrameNo <> LastFrameNo then + begin + LastFrameNo:= FrameNo; + Think(Gear) + end; end; end.