// non-custom race
 public Race(Enum_Races race,
  Enum_Size_Categories creature_size, 
  Enum_Creature_Types creature_type, 
  List<Enum_Creature_Subtypes> creature_subtypes, 
  int base_movespeed,
  List<Enum_Languages> starting_languages, 
  List<Enum_Special_Abilities> special_abilities, 
  List<Enum_Senses> innate_senses, 
  List<Enum_Defensive_Racial_Traits> defensive_traits, 
  List<Enum_Offensive_Racial_Traits> offensive_traits)
 {
     // racial identifier
      this.race = race;
      // name
      if (this.race == Enum_Races.Custom)
      {
     this.name = "Custom Race";
      }
      else
      {
     this.name = EnumHandler.ToString(race.ToString());
      }
      // size class
      this.size = creature_size;
      // creature type
      this.creatureType = creature_type;
      // creature subtypes
      this.creatureSubTypes = new List<Enum_Creature_Subtypes>();
      foreach (Enum_Creature_Subtypes subtype in creature_subtypes)
      {
     this.creatureSubTypes.Add(subtype);
      }
      // move speed
      this.baseMoveSpeed = base_movespeed;
      // starting languages
      this.startingLanguages = new List<Enum_Languages>();
      foreach (Enum_Languages language in starting_languages)
      {
     this.startingLanguages.Add(language);
      }
      // special abilities
      this.specialAbilities = new List<Enum_Special_Abilities>();
      foreach (Enum_Special_Abilities ability in special_abilities)
      {
     this.specialAbilities.Add(ability);
      }
      // senses
      this.senses = new List<Enum_Senses>();
      foreach (Enum_Senses sense in innate_senses)
      {
     this.senses.Add(sense);
      }
      // defensive traits
      this.defensiveTraits = new List<Enum_Defensive_Racial_Traits>();
      foreach (Enum_Defensive_Racial_Traits trait in defensive_traits)
      {
     this.defensiveTraits.Add(trait);
      }
      // offensive traits
      this.offensiveTraits = new List<Enum_Offensive_Racial_Traits>();
      foreach (Enum_Offensive_Racial_Traits trait in offensive_traits)
      {
     this.offensiveTraits.Add(trait);
      }
 }
 /// <summary>
 /// Create a custom race.
 /// </summary>
 /// <param name="custom_race_name"></param>
 /// <param name="creature_size"></param>
 /// <param name="creature_type"></param>
 /// <param name="creature_subtypes"></param>
 /// <param name="base_movespeed"></param>
 /// <param name="starting_languages"></param>
 /// <param name="special_abilities"></param>
 /// <param name="innate_senses"></param>
 /// <param name="defensive_traits"></param>
 /// <param name="offensive_traits"></param>
 public Race(string custom_race_name,
  Enum_Size_Categories creature_size,
  Enum_Creature_Types creature_type,
  List<Enum_Creature_Subtypes> creature_subtypes,
  int base_movespeed,
  List<Enum_Languages> starting_languages,
  List<Enum_Special_Abilities> special_abilities,
  List<Enum_Senses> innate_senses,
  List<Enum_Defensive_Racial_Traits> defensive_traits,
  List<Enum_Offensive_Racial_Traits> offensive_traits)
     : this(Enum_Races.Custom, creature_size, creature_type, creature_subtypes, base_movespeed, starting_languages, special_abilities, innate_senses, defensive_traits, offensive_traits)
 {
     this.name = custom_race_name;
 }
        public static SizeInfo GetSizeInfo(Enum_Size_Categories size)
        {
            SizeInfo info = new SizeInfo() { Size = size };

             switch(size){
            case(Enum_Size_Categories.Fine):
               info.SizeModifier = 8;
               info.SpecialSizeModifier = -8;
               info.FlyModifier = 8;
               info.StealthModifier = 16;
               info.Space = .5;
               info.NaturalReach = 0;
               info.TypicalHeight = new Tuple<float,float>(0, (float).5);
               info.TypicalWeight = new Tuple<float,float>(0, (float).125);
               break;
            case(Enum_Size_Categories.Diminuitive):
               info.SizeModifier = 4;
               info.SpecialSizeModifier = -4;
               info.FlyModifier = 6;
               info.StealthModifier = 12;
               info.Space = 1;
               info.NaturalReach = 0;
               info.TypicalHeight = new Tuple<float,float>((float).5, 1);
               info.TypicalWeight = new Tuple<float, float>((float).125, 1);
               break;
            case(Enum_Size_Categories.Tiny):
               info.SizeModifier = 2;
               info.SpecialSizeModifier = -2;
               info.FlyModifier = 4;
               info.StealthModifier = 8;
               info.Space = 2.5;
               info.NaturalReach = 0;
               info.TypicalHeight = new Tuple<float,float>(1, 2);
               info.TypicalWeight = new Tuple<float,float>(1, 8);
               break;
            case(Enum_Size_Categories.Small):
               info.SizeModifier = 1;
               info.SpecialSizeModifier = -1;
               info.FlyModifier = 2;
               info.StealthModifier = 4;
               info.Space = 5;
               info.NaturalReach = 5;
               info.TypicalHeight = new Tuple<float, float>(2, 4);
               info.TypicalWeight = new Tuple<float,float>(8, 60);
               break;
            case(Enum_Size_Categories.Medium):
               info.SizeModifier = 0;
               info.SpecialSizeModifier = 0;
               info.FlyModifier = 0;
               info.StealthModifier = 0;
               info.Space = 5;
               info.NaturalReach = 5;
               info.TypicalHeight = new Tuple<float, float>(4, 8);
               info.TypicalWeight = new Tuple<float, float>(60, 500);
               break;
            case(Enum_Size_Categories.Large_Tall):
               info.SizeModifier = -1;
               info.SpecialSizeModifier = 1;
               info.FlyModifier = -2;
               info.StealthModifier = -4;
               info.Space = 10;
               info.NaturalReach = 10;
               info.TypicalHeight = new Tuple<float, float>(8, 16);
               info.TypicalWeight = new Tuple<float, float>(500, 4000);
               break;
            case (Enum_Size_Categories.Large_Long):
               info.SizeModifier = -1;
               info.SpecialSizeModifier = 1;
               info.FlyModifier = -2;
               info.StealthModifier = -4;
               info.Space = 10;
               info.NaturalReach = 5;
               info.TypicalHeight = new Tuple<float, float>(8, 16);
               info.TypicalWeight = new Tuple<float, float>(500, 4000);
               break;
            case(Enum_Size_Categories.Huge_Tall):
               info.SizeModifier = -2;
               info.SpecialSizeModifier = 2;
               info.FlyModifier = -4;
               info.StealthModifier = -8;
               info.Space = 15;
               info.NaturalReach = 15;
               info.TypicalHeight = new Tuple<float, float>(16, 32);
               info.TypicalWeight = new Tuple<float, float>(4000, 32000);
               break;
            case (Enum_Size_Categories.Huge_Long):
               info.SizeModifier = -2;
               info.SpecialSizeModifier = 2;
               info.FlyModifier = -4;
               info.StealthModifier = -8;
               info.Space = 15;
               info.NaturalReach = 10;
               info.TypicalHeight = new Tuple<float, float>(16, 32);
               info.TypicalWeight = new Tuple<float, float>(4000, 32000);
               break;
            case(Enum_Size_Categories.Gargantuan_Tall):
               info.SizeModifier = -4;
               info.SpecialSizeModifier = 4;
               info.FlyModifier = -6;
               info.StealthModifier = -12;
               info.Space = 20;
               info.NaturalReach = 20;
               info.TypicalHeight = new Tuple<float, float>(32, 64);
               info.TypicalWeight = new Tuple<float, float>(32000, 250000);
               break;
            case (Enum_Size_Categories.Gargantuan_Long):
               info.SizeModifier = -4;
               info.SpecialSizeModifier = 4;
               info.FlyModifier = -6;
               info.StealthModifier = -12;
               info.Space = 20;
               info.NaturalReach = 15;
               info.TypicalHeight = new Tuple<float, float>(32, 64);
               info.TypicalWeight = new Tuple<float, float>(32000, 250000);
               break;
            case(Enum_Size_Categories.Colossal_Tall):
               info.SizeModifier = -8;
               info.SpecialSizeModifier = 8;
               info.FlyModifier = -6;
               info.StealthModifier = -16;
               info.Space = 30;
               info.NaturalReach = 30;
               info.TypicalHeight = new Tuple<float, float>(64, float.MaxValue);
               info.TypicalWeight = new Tuple<float, float>(250000, float.MaxValue);
               break;
            case (Enum_Size_Categories.Colossal_Long):
               info.SizeModifier = -8;
               info.SpecialSizeModifier = 8;
               info.FlyModifier = -6;
               info.StealthModifier = -16;
               info.Space = 30;
               info.NaturalReach = 20;
               info.TypicalHeight = new Tuple<float, float>(64, float.MaxValue);
               info.TypicalWeight = new Tuple<float, float>(250000, float.MaxValue);
               break;
            default:
               throw new InvalidOperationException("SizeHandler: Invalid size category chosen.");
             }

             return info;
        }