anchor.diff:    fMaxSoldiersInMin := 0;
     // Estimation of final weapons production
     // Iron weapons
  -  aIronMineCnt := 2;
  +  aIronMineCnt := 3;
     MaxIronWeapProd := aIronMineCnt * ProductionRate[wt_IronOre] / 2.0;
     for I := Low(IRON_WARFARE) to High(IRON_WARFARE) do
       fWareBalance[ IRON_WARFARE[I] ].FinalConsumption := MaxIronWeapProd;
     //Standard weapons
     MaxWoodWeapProd := Min(6.0, Max(2.0,aBuildCnt / 900.0)) * ProductionRate[wt_Axe]; // 2 <-> 6 in matter of avaiable place
  -  MaxWoodWeapProd := 0 * ProductionRate[wt_Axe];
  +  MaxWoodWeapProd := 2 * ProductionRate[wt_Axe];
     for I := Low(STANDARD_WARFARE) to High(STANDARD_WARFARE) do
       fWareBalance[ STANDARD_WARFARE[I] ].FinalConsumption := MaxWoodWeapProd;
     fWareBalance[wt_Armor].FinalConsumption := MaxWoodWeapProd;
  
positive.code:     procedure UpdateWareDerivation(aWT: TWareType; aInitialization: Boolean = False);
      procedure UpdateWareBalance(aInitialization: Boolean = False);
  
      //procedure PlanCityStats();
      procedure UpdateBasicHouses(aInitialization: Boolean = False);
      procedure UpdateCityStats();
    public
  
negative.code: end;
  
  
  procedure TKMCityPredictor.Save(SaveStream: TKMemoryStream);
  var
    WT: TWareType;
  begin
    SaveStream.WriteA('CityPredictor');
    SaveStream.Write(fOwner);
    SaveStream.Write(fCornDelay);
    SaveStream.Write(fMaxSoldiersInMin);
  
    // Requred houses should be saved because of public variable
    SaveStream.Write(RequiredHouses, SizeOf(TRequiredHousesArray));
    // fWareBalance must be saved because of FinalConsumption
    for WT := WARE_MIN to WARE_MAX do
      SaveStream.Write(fWareBalance[WT], SizeOf(TWareBalance));
    // Stats are updated each cycle and doesn't have to be saved
    //fCityStats: TCityStats;
  end;
  
  
  procedure TKMCityPredictor.Load(LoadStream: TKMemoryStream);
  var
    WT: TWareType;
  begin
    LoadStream.ReadAssert('CityPredictor');
    LoadStream.Read(fOwner);
    LoadStream.Read(fCornDelay);
    LoadStream.Read(fMaxSoldiersInMin);
  
    // Requred houses should be saved because of public variable
    LoadStream.Read(RequiredHouses, SizeOf(TRequiredHousesArray));
    // fWareBalance must be saved because of FinalConsumption
    for WT := WARE_MIN to WARE_MAX do
      LoadStream.Read(fWareBalance[WT], SizeOf(TWareBalance));
    // Stats are updated each cycle and doesn't have to be saved
    //fCityStats: TCityStats;
  end;
  
  
  procedure TKMCityPredictor.OwnerUpdate(aPlayer: TKMHandIndex);
  begin
    fOwner := aPlayer;
  