private void CalculateAttributePointLimits(AttributeCode attribute, out int surePoints, out int variablePoints)
        {
            int MaxStart = IsMainAttribute(attribute) ? 3 : RuleTables.GetStartingMaxAttribute(Exceptionality);
            int MaxZv    = GetAttributeMax(attribute) - MaxStart;
            int Val      = BaseAttributes[attribute];

            surePoints     = Math.Max(Val - MaxStart, 0);
            variablePoints = Math.Min(MaxZv - surePoints, Val - (IsMainAttribute(attribute) ? 1 : 0));
        }
        public int GetAttributeMax(AttributeCode attribute)
        {
            if (!BaseAttributes.ContainsKey(attribute))
            {
                throw new ArgumentOutOfRangeException("Tried to get nonexistent attribute.");
            }

            if (IsMainAttribute(attribute))
            {
                return(3 + (Level - 1) - ((Level - 1) / 3));
            }

            return(RuleTables.GetStartingMaxAttribute(Exceptionality) + (Level - 1) - (Level - 1) / 2);
        }