anchor.diff:    I, Cnt: Integer;
   begin
     LoadStream.ReadAssert('CityBuilder');
  +  LoadStream.Read(fStoneShortage);
  +  LoadStream.Read(fWoodShortage);
  +  LoadStream.Read(fTrunkShortage);
  +  LoadStream.Read(fGoldShortage);
     LoadStream.Read(fOwner);
   
     LoadStream.Read(Cnt);
  
positive.code:   GA_BUILDER_BuildHouse_RTPMaxWork      : Single = 10;
    GA_BUILDER_BuildHouse_RoadMaxWork     : Single = 10;
    GA_BUILDER_CreateShortcuts_MaxWork    : Single = 1.886523724;
    GA_BUILDER_ChHTB_FractionCoef         : Single = 22.06742477;
    GA_BUILDER_ChHTB_TrunkFactor          : Single = 8.568861008;
    GA_BUILDER_ChHTB_TrunkBalance         : Single = 5.72991991;
    GA_BUILDER_ChHTB_AllWorkerCoef        : Single = 8;
  
negative.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
        Check := False;
        // Wait till is tree removed and check if there exist node with remove tree mode
        if (fPlanner.PlannedHouses[aHT].Plans[HouseIdx].RemoveTreeInPlanProcedure) then
          for I := Low(fBuildNodes) to High(fBuildNodes) do
            if fBuildNodes[I].Active AND fBuildNodes[I].RemoveTreesMode then
            begin
              Check := True;
              break;
            end;
        // House plan cannot be placed because of existing tree -> remove it by placing wine and road at specific tiles
        if not Check then
        begin
          if (fPlanner.GetTreesInHousePlan(aHT, HouseIdx, fBuildNodes[Node1Idx].FieldList) > 0) then
          begin
            fPlanner.PlannedHouses[aHT].Plans[HouseIdx].RemoveTreeInPlanProcedure := True;
            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;
      end
      else
        Output := cs_RemoveTreeProcedure; // Remove tree procedure is active
  