anchor.diff:      procedure UnlockPointOfNode(aPoint: TKMPoint; aCheckHousePlan: Boolean = False);
       procedure UnlockNode(var aNode: TBuildNode; aCheckHousePlan: Boolean = False);
   
  +    procedure CheckBasicMaterials(var aFreeWorkersCnt, aMaxPlans, aMaxPlace: Integer; var aTrunkBalance: Single; aTick: Cardinal);
       procedure CreateShortcuts();
     public
       constructor Create(aPlayer: TKMHandIndex; aPredictor: TKMCityPredictor);
  
positive.code: end;
  
  
  procedure TKMCityBuilder.ChooseHousesToBuild(aFreeWorkersCnt: Integer; aTick: Cardinal);
  type
    TSetOfWare = set of TKMWareType;
  
negative.code: 
  
  procedure TKMCityBuilder.UpdateState(aTick: Cardinal; out aFreeWorkersCnt: Integer);
  const
    CHECK_STONE_RESERVES = 3 * 60 * MAX_HANDS; // Every 3 min check stone reserves
  begin
    if (aTick mod MAX_HANDS = fOwner) then
    begin
      fPlanner.UpdateState(aTick); // Planner must be updated as first to secure that completed houses are actualized
      UpdateBuildNodes(aFreeWorkersCnt);
      if (aTick mod CHECK_STONE_RESERVES = fOwner) then // First update stone reserves
        Planner.CheckStoneReserves();
    end;
  end;
  
  