anchor.diff:  
       procedure MarkAsExhausted(aHT: TKMHouseType; aLoc: TKMPoint);
   
  +    procedure RemoveHouseType(aHT: TKMHouseType);
       procedure RemovePlan(aHT: TKMHouseType; aLoc: TKMPoint); overload;
       procedure RemovePlan(aHT: TKMHouseType; aIdx: Integer); overload;
   
  
positive.code:           for I := 0 to BuildFF.Locs.Count - 1 do
            begin
              Loc := BuildFF.Locs.Items[I];
              Bid := 10000
                     - BuildFF.Distance[Loc] * 100 // Snap crit is agresive
                     + SnapCrit(aHT, Loc);
              if (Bid > BestBid) then
              begin
  
negative.code: end;
  
  
  // Remove one of placed houses
  procedure TKMCityPlanner.RemoveHouseType(aHT: TKMHouseType);
  const
    INIT_BID = 10000;
    RESOURCE_PRICE = 1;
    PRODUCT_PRICE = 5;
    MAX_BID = 8;
  var
    Idx, BestIdx: Integer;
    Bid, BestBid: Single;
    H: TKMHouse;
  begin
    BestBid := INIT_BID;
    BestIdx := 0;
    for Idx := 0 to fPlannedHouses[aHT].Count - 1 do
      if (fPlannedHouses[aHT].Plans[Idx].House <> nil) then
      begin
        H := fPlannedHouses[aHT].Plans[Idx].House;
        Bid := H.CheckResIn(wt_All) * RESOURCE_PRICE + H.CheckResOut(wt_All) * PRODUCT_PRICE;
        if (Bid < BestBid) then
        begin
          BestBid := Bid;
          BestIdx := Idx;
        end;
      end;
    if (Bid < MAX_BID) then
    begin
      fPlannedHouses[aHT].Plans[BestIdx].House.DemolishHouse(fOwner);
      RemovePlan(aHT, BestIdx);
    end;
  end;
  
  procedure TKMCityPlanner.RemovePlan(aHT: TKMHouseType; aLoc: TKMPoint);
  var
    I: Integer;
  