Fix bots regressions
authorunc0rr
Tue, 10 Oct 2006 18:03:48 +0000
changeset 193 56885ea29202
parent 192 b644f61e803f
child 194 88652abdce9a
Fix bots regressions
hedgewars/CMakeLists.txt
hedgewars/uAI.pas
hedgewars/uAIActions.pas
--- a/hedgewars/CMakeLists.txt	Mon Oct 09 18:26:44 2006 +0000
+++ b/hedgewars/CMakeLists.txt	Tue Oct 10 18:03:48 2006 +0000
@@ -24,12 +24,12 @@
 		string(REGEX REPLACE "[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" fpc_vers_minor "${fpc_version}")
 		string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" fpc_vers_patch "${fpc_version}")
 		math(EXPR fpc_ver "${fpc_vers_major}*10000 + ${fpc_vers_minor}*100 + ${fpc_vers_patch}")
-		if (${fpc_ver} LESS "010906")
-			message("Minimum required version of FreePascal is 2.0.5")
-		else (${fpc_ver} LESS "010906")
+		if (fpc_ver LESS "010906")
+			message("Minimum required version of FreePascal is 1.9.6")
+		else (fpc_ver LESS "010906")
 			set(pascal_compiler ${fpc_executable})
 			set(pascal_compiler_flags "-B" "-Sd" "-Xs" "-OG" "-O2" "-Cs2000000" ${hwengine_project})
-		endif (${fpc_ver} LESS "010906")
+		endif (fpc_ver LESS "010906")
 	endif (fpc_version)
 endif (dcc32version)
 
--- 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.
--- a/hedgewars/uAIActions.pas	Mon Oct 09 18:26:44 2006 +0000
+++ b/hedgewars/uAIActions.pas	Tue Oct 10 18:03:48 2006 +0000
@@ -30,14 +30,15 @@
       aia_Down       = 6;
 
       aia_Weapon     = $80000000;
-      aia_WaitX      = $80000001;
-      aia_WaitY      = $80000002;
+      aia_WaitXL     = $80000001;
+      aia_WaitXR     = $80000002;
       aia_LookLeft   = $80000003;
       aia_LookRight  = $80000004;
       aia_AwareExpl  = $80000005;
       aia_HJump      = $80000006;
       aia_LJump      = $80000007;
       aia_Skip       = $80000008;
+      aia_Wait       = $80000009;
 
       aim_push       = $80000000;
       aim_release    = $80000001;
@@ -71,7 +72,7 @@
                      );
 
 {$IFDEF TRACEAIACTIONS}
-const SpecActionIdToStr: array[$80000000..$80000008] of string[16] = (
+const SpecActionIdToStr: array[$80000000..$80000009] of string[16] = (
 {aia_Weapon}             'aia_Weapon',
 {aia_WaitX}              'aia_WaitX',
 {aia_WaitY}              'aia_WaitY',
@@ -80,7 +81,8 @@
 {aia_AwareExpl}          'aia_AwareExpl',
 {aia_HJump}              'aia_HJump',
 {aia_LJump}              'aia_LJump',
-{aia_Skip}               'aia_Skip'
+{aia_Skip}               'aia_Skip',
+{aia_Wait}               'aia_Wait'
 );
 
 procedure DumpAction(Action: TAction; Me: PGear);
@@ -89,7 +91,7 @@
    WriteLnToConsole('AI action: '+ActionIdToStr[Action.Action])
 else begin
    WriteLnToConsole('AI action: '+SpecActionIdToStr[Action.Action]);
-   if Action.Action = aia_WaitX then
+   if (Action.Action = aia_WaitXL) or (Action.Action = aia_WaitXR) then
       WriteLnToConsole('AI action Wait X = '+inttostr(Action.Param)+', current X = '+inttostr(round(Me.X)));
    end
 end;
@@ -123,10 +125,20 @@
      if (Action and ai_specmask) <> 0 then
         case Action of
            aia_Weapon: SetWeapon(TAmmoType(Param));
-            aia_WaitX: if round(Me.X) = Param then Time:= GameTicks
-                                              else exit;
-            aia_WaitY: if round(Me.Y) = Param then Time:= GameTicks
-                                              else exit;
+           aia_WaitXL: if round(Me.X) = Param then Time:= GameTicks
+                          else if Round(Me.X) < Param then
+                               begin
+                               OutError('AI: WaitXL assert');
+                               Actions.Count:= 0
+                               end
+                          else exit;
+           aia_WaitXR: if round(Me.X) = Param then Time:= GameTicks
+                          else if Round(Me.X) > Param then
+                               begin
+                               OutError('AI: WaitXR assert');
+                               Actions.Count:= 0
+                               end
+                          else exit;
          aia_LookLeft: if Me.dX >= 0 then
                           begin
                           ParseCommand('+left');
@@ -141,6 +153,9 @@
             aia_HJump: ParseCommand('hjump');
             aia_LJump: ParseCommand('ljump');
              aia_Skip: ParseCommand('skip');
+             aia_Wait: if Param > GameTicks then exit
+                          else with CurrentTeam.Hedgehogs[CurrentTeam.CurrHedgehog] do
+                                    Gear.State:= Gear.State and not gstHHThinking
              end else
         begin
         s:= ActionIdToStr[Action];