anchor.diff:      for HT in ActualHouseSet do
         for I := 0 to fPlanner.PlannedHouses[HT].Count - 1 do
           with fPlanner.PlannedHouses[HT].Plans[I] do
  -          if not Placed AND (HouseReservation OR RemoveTreeInPlanProcedure)
  +          if not Placed
  +             AND (HouseReservation OR RemoveTreeInPlanProcedure)
                AND (cs_HousePlaced = AddToConstruction(HT,False,True)) then
             begin
               MaxPlans := MaxPlans - 1;
  
positive.code:   public
      constructor Create(aPlayer: TKMHandIndex; aPredictor: TKMCityPredictor);
      destructor Destroy(); override;
  
      property Planner: TKMCityPlanner read fPlanner;
      property WorkersPos: TKMPointArray read fWorkersPos;
  
negative.code:   LoadStream.Read(Cnt);
    SetLength(fBuildNodes, Cnt);
    for I := 0 to Cnt - 1 do
      with fBuildNodes[I] do
      begin
        LoadStream.Read(Active);
        LoadStream.Read(RemoveTreesMode);
        LoadStream.Read(ShortcutMode);
        LoadStream.Read(FreeWorkers);
        LoadStream.Read(RequiredWorkers);
        LoadStream.Read(MaxReqWorkers);
        LoadStream.Read(CenterPoint, SizeOf(CenterPoint));
        LoadStream.Read(FieldType, SizeOf(TKMFieldType));
        FieldList := TKMPointList.Create();
        FieldList.LoadFromStream(LoadStream);
      end;
  
    fPlanner.Load(LoadStream);
  end;
  
  
  procedure TKMCityBuilder.SyncLoad();
  begin
    fPlanner.SyncLoad();
  end;
  
  
  procedure TKMCityBuilder.AfterMissionInit(out aGoldMineCnt, aIronMineCnt, aFieldCnt, aBuildCnt: Integer);
  var
    I: Integer;
  begin
    fPlanner.AfterMissionInit();
    SetLength(fBuildNodes, gHands[fOwner].AI.Setup.WorkerCount);
    for I := Low(fBuildNodes) to High(fBuildNodes) do
    begin
      fBuildNodes[I].FieldList := TKMPointList.Create();
      fBuildNodes[I].Active := False;
    end;
  end;
  
  
  