anchor.diff:      // Check if AI can build house (if is house blocked [by script] ignore it)
       if GetHouseToUnlock(UnlockProcedure, aHT, FollowingHouse) then
       begin
  -      MaterialShortage := not aIgnoreWareReserves AND (WoodShortage OR TrunkShortage OR StoneShortage OR GoldShortage);
  +      MaterialShortage := not aIgnoreWareReserves AND (fWoodShortage OR fTrunkShortage OR fStoneShortage OR fGoldShortage);
         //MaterialShortage := False; // Enable / disable pre-building (building without placing house plans when we are out of materials)
         Output := BuildHouse(UnlockProcedure OR (aHT = ht_Farm) OR MaterialShortage, MaterialShortage, MaterialShortage, aHT); // Farm should be placed outside of forest
       end
  
positive.code:     begin
        Output := cs_RemoveTreeProcedure; // Remove tree procedure does not require significant count of workers so there is not need for separate mark
        // Remove tree procedure is already active
        if (fPlanner.PlannedHouses[aHT].Plans[HouseIdx].RemoveTreeInPlanProcedure) then
        begin
          // Wait till is tree removed
        end
        // House plan cannot be placed because of existing tree -> remove it by placing wine and road at specific tiles
        else if (fPlanner.GetTreesInHousePlan(aHT, HouseIdx, fBuildNodes[Node1Idx].FieldList) > 0) then
        begin
          for I := Low(fBuildNodes) to High(fBuildNodes) do
            if fBuildNodes[I].Active
              AND fBuildNodes[I].RemoveTreesMode
              AND (fBuildNodes[I].FieldList.Count > 0)
              AND KMSamePoint(fBuildNodes[Node1Idx].FieldList.Items[0], fBuildNodes[I].FieldList.Items[0]) then
            begin
              fBuildNodes[Node1Idx].FieldList.Clear;
              Exit;
            end;
          with fBuildNodes[Node1Idx] do
          begin
            Active := True;
            RemoveTreesMode := True;
            ShortcutMode := False;
            MaxReqWorkers := Round(GA_BUILDER_BuildHouse_RTPMaxWork);
            RequiredWorkers := Min(MaxReqWorkers, FieldList.Count); // Real count will be updated during building process
            CenterPoint := Loc;
          end;
        end
        // There is another problem...
        else
          Planner.RemovePlan(aHT, Loc);
      end
      else
        Output := cs_RemoveTreeProcedure; // Remove tree procedure is active
  
negative.code:     if fBuildNodes[I].Active then
        cnt := cnt + 1;
    aBalanceText := aBalanceText + '|Active nodes:' + IntToStr(cnt);
    if fStoneShortage then
      aBalanceText := aBalanceText + '|Stone shortage';
    if fTrunkShortage then
      aBalanceText := aBalanceText + '|Trunk shortage';
    if fWoodShortage then
      aBalanceText := aBalanceText + '|Wood shortage';
    if fGoldShortage then
      aBalanceText := aBalanceText + '|Gold shortage';
  end;
  
  