anchor.diff:      procedure CheckStoreWares(aTick: Cardinal);
       procedure CheckExhaustedHouses();
       procedure CheckAutoRepair();
  +    procedure CheckWareDistribution();
   
       procedure WeaponsBalance();
       procedure OrderWeapons();
  
positive.code:       WoodReq := Round((DEFAULT_COEFICIENT - WoodReq) / 5.0); // 5 is equal to sum of all requirements in leather category
        for UT in WOOD_ARMY do
          if not gHands[fOwner].Locks.GetUnitBlocked(UT) then
            for I := Low(TROOP_COST[UT]) to High(TROOP_COST[UT]) do
              if (TROOP_COST[UT,I] <> wt_None) then
                with fRequiredWeapons[ TROOP_COST[UT,I] ] do
                  Required := Required + Round(DEFAULT_ARMY_REQUIREMENTS[UT] * WoodReq);
      end;
  
  
negative.code: 
    // Get count of needed weapons
    for UT := ut_AxeFighter to WARRIOR_EQUIPABLE_MAX do // Skip militia
      for I := Low(TroopCost[UT]) to High(TroopCost[UT]) do
        if (TroopCost[UT,I] <> wt_None) then
        begin
          WT := TroopCost[UT,I];
          fRequiredWeapons[WT].Required := fRequiredWeapons[WT].Required + fWarriorsDemands[UT];
        end
        else
  