public int RaceBAB()
        {
            switch (BaseRaceType)
            {
            case RaceType.Race:
                return(0);

            case RaceType.StatBlock:
            case RaceType.BestiaryStatBlock:
                if (!UseRacialHD)
                {
                    return(0);                  // determined by class
                }
                if (Race_SB.BaseAtk.Length > 0)
                {
                    return(StatBlockInfo.ComputeBAB(RacialHDValue(), BaseBABType));
                }
                else
                {
                    return(0);
                }

            case RaceType.None:
                return(0);
            }
            return(-100);
        }
        public int GetBABValue()
        {
            int Count = 0;

            foreach (ClassWrapper wrapper in Classes)
            {
                Count += StatBlockInfo.ComputeBAB(wrapper.Level, wrapper.ClassInstance.BABType);
            }
            return(Count);
        }
        public int GetBABValue(out string formula)
        {
            int Count = 0;

            formula = string.Empty;
            foreach (ClassWrapper wrapper in Classes)
            {
                int value = StatBlockInfo.ComputeBAB(wrapper.Level, wrapper.ClassInstance.BABType);
                Count   += value;
                formula += wrapper.Name + ": " + wrapper.Level.ToString() + PathfinderConstants.SPACE + wrapper.ClassInstance.BABType.ToString()
                           + " computed BAB--" + value.ToString();
            }
            return(Count);
        }