anchor.diff:          Explanation:string; //Debug only, explanation what unit is doing
         public
           constructor Create(KMUnit: TKMUnit; LocB,Avoid:TKMPoint; const aActionType:TUnitActionType=ua_Walk; const aWalkToSpot:boolean=true; const IgnorePass:boolean=false);
  +        function ChoosePassability(KMUnit: TKMUnit; DoIgnorePass:boolean):TPassability;
           function DoUnitInteraction():boolean;
           procedure Execute(KMUnit: TKMUnit; TimeDelta: single; out DoEnd: Boolean); override;
         end;
  
positive.code:   if not fRouteBuilt then
      fLog.AddToLog('Unable to make a route '+TypeToString(fWalkFrom)+' > '+TypeToString(fWalkTo)+'with canWalk');
  
    if fRouteBuilt then
    if not fWalkToSpot then dec(NodeCount); //Approach spot from any side
  end;
  
  
  
negative.code: { TUnitActionWalkTo }
  constructor TUnitActionWalkTo.Create(KMUnit: TKMUnit; LocB,Avoid:TKMPoint; const aActionType:TUnitActionType=ua_Walk; const aWalkToSpot:boolean=true; const IgnorePass:boolean=false);
  begin
    Assert(LocB.X*LocB.Y<>0,'Illegal WalkTo 0;0');
  
    Inherited Create(aActionType);
    fWalker       := KMUnit;
    fWalkFrom     := fWalker.GetPosition;
    fWalkTo       := LocB;
    fWalkToSpot   := aWalkToSpot;
    fPass         := ChoosePassability(fWalker, IgnorePass);
  
    NodePos       :=1;
    fRouteBuilt   :=false;     
  
    if KMSamePoint(fWalkFrom,fWalkTo) then //We don't care for this case, Execute will report action is done immediately
      exit; //so we don't need to perform any more processing
  
    //Build a route A*
    fTerrain.Route_Make(fWalkFrom, fWalkTo, Avoid, fPass, NodeCount, Nodes); //Try to make the route with fPass
  