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:   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 ...)
  end;
  
  procedure TKMCityPlanner.OwnerUpdate(aPlayer: TKMHandIndex);
  
negative.code:              //- Byte(gAIFields.Influences.AvoidBuilding[Loc.Y, Loc.X] >= AVOID_BUILDING_COAL_TILE) * 100000; // Try not to place woodcutter into full forest or coal tile
        if (Bid > BestBid) then
        begin
          Check := True;
          for I := Low(HMA[htWoodcutters].Tiles) to High(HMA[htWoodcutters].Tiles) do
          begin
            Point := KMPointAdd( Loc, HMA[htWoodcutters].Tiles[I] );
            if (gTerrain.TileIsCoal(Point.X, Point.Y) <> 0) then
            begin
              Check := False;
              break;
            end;
          end;
          if Check then
          begin
            BestBid := Bid;
            BestLoc := Loc;
          end;
        end;
      end;
    end;
  