public int BaseQuality(int control, int crafterLevel)
        {
            CraftLevelDifference diff = GetCraftLevelDifference(crafterLevel);

            if (diff == null)
            {
                throw new ArgumentException("Invalid crafter level / recipe level difference", "crafterLevel");
            }
            return((control + 10000)
                   / (RecipeLevelTable.SuggestedControl + 10000)
                   * ((control * 35) / 100 + 35)
                   * diff.QualityFactor / 100);
        }
        public int BaseProgress(int craftsmanship, int crafterLevel)
        {
            CraftLevelDifference diff = GetCraftLevelDifference(crafterLevel);

            if (diff == null)
            {
                throw new ArgumentException("Invalid crafter level / recipe level difference", "crafterLevel");
            }

            return((craftsmanship + 10000)
                   / (RecipeLevelTable.SuggestedCraftsmanship + 10000)
                   * ((craftsmanship * 21) / 100 + 2)
                   * diff.ProgressFactor / 100);
        }