anchor.diff:      procedure LogStatus(var aBalanceText: UnicodeString);
       procedure Paint();
     end;
  -
  -
  -const
  -  STONE_SHORTAGE = 10;
  -  TRUNK_SHORTAGE = 3;
  -  WOOD_SHORTAGE = 10;
  -  GOLD_SHORTAGE = 20;
   
   
   implementation
  
positive.code:     if fBuildNodes[I].Active then
        cnt := cnt + 1;
    aBalanceText := aBalanceText + '|Active nodes:' + IntToStr(cnt);
    if (fPredictor.WareBalance[wt_Stone].Exhaustion < STONE_SHORTAGE) then
      aBalanceText := aBalanceText + '|Stone shortage';
    if ((gHands[fOwner].Stats.GetWareBalance(wt_Trunk) + gHands[fOwner].Stats.GetWareBalance(wt_Wood) / 2) / Max(0.1,fPredictor.WareBalance[wt_Trunk].ActualConsumption) < TRUNK_SHORTAGE) then
      aBalanceText := aBalanceText + '|Trunk shortage';
    if (fPredictor.WareBalance[wt_Wood].Exhaustion < WOOD_SHORTAGE) then
      aBalanceText := aBalanceText + 'Wood shortage';
    if (fPredictor.WareBalance[wt_Gold].Exhaustion < GOLD_SHORTAGE) then
      aBalanceText := aBalanceText + '|Gold shortage';
  end;
  
  
negative.code:         if (FreeWorkers <= 0) then
            Exit;
          // Detect obstacles in house plan
          if gTerrain.ObjectIsChopableTree(FieldList.Items[I], [caAge1,caAge2,caAge3,caAgeFull]) then
          begin
            // Check if is wine plan already placed
            if IsPlan(FieldList.Items[I], tlFieldWork, ft_Wine) then
  