anchor.diff:      RADIUS = 3;
       MAX_BID = 100000;
     var
  +    PL: TKMHandIndex;
       X,Y: Integer;
       Bid, BestBid: Single;
       Loc, BestLoc: TKMPoint;
     begin
  +    // Filter defence positions, build towers only at the closest
  +    PL := gAIFields.Influences.GetBestAllianceOwner(fOwner, aCenter, at_Ally);
  +    if (PL <> fOwner) AND (PL <> PLAYER_NONE) then
  +      Exit;
       BestBid := MAX_BID;
       for Y := Max(1, aCenter.Y - RADIUS) to Min(gTerrain.MapY, aCenter.Y + RADIUS) do
       for X := Max(1, aCenter.X - RADIUS) to Min(gTerrain.MapX, aCenter.X + RADIUS) do
  
positive.code:   RADIUS = 5;
    MIN_BID = -100000;
  var
    Output: Boolean;
    X,Y: Integer;
    Bid, BestBid: Single;
    Loc, BestLoc: TKMPoint;
  begin
    Output := False;
    BestBid := MIN_BID;
    for Y := Max(1, aCenter.Y - RADIUS) to Min(gTerrain.MapY, aCenter.Y + RADIUS) do
    for X := Max(1, aCenter.X - RADIUS) to Min(gTerrain.MapX, aCenter.X + RADIUS) do
    begin
      Loc := KMPoint(X,Y);
      if (gTerrain.TileIsCoal(X, Y) = 0) AND gAIFields.Eye.CanAddHousePlan(Loc, htWoodcutters, not aChopOnly, False, False) then
      //if gAIFields.Eye.CanAddHousePlan(Loc, ht_Woodcutters, True, False, False) then
      begin
        Bid := - GA_PLANNER_PlaceWoodcutter_DistFromForest * KMDistanceAbs(aCenter, Loc)
  
negative.code:   fPerfIdx := 255; // fPerfArr will be reset in next step
    SetLength(fPerfArr, gTerrain.MapY, gTerrain.MapX);
    // Actual houses will be added in UpdateState (script may remove / add something after mission init ...)
    UpdateState(0);
  end;
  
  procedure TKMCityPlanner.OwnerUpdate(aPlayer: TKMHandIndex);
  