static void RollOnChart(Animal result, Chart chart, Dice dice, string dieCode = "D6")
        {
            var option = dice.ChooseByRoll(chart.Option, dieCode);

            if (option.Attributes != null)
                foreach (var att in option.Attributes)
                    result.Increase(att.Name, dice.D(att.Bonus));

            if (option.Charts != null)
                foreach (var subChart in option.Charts)
                {
                    RollOnChart(result, subChart, dice, subChart.Roll);
                }

            if (option.Features != null)
                foreach (var feature in option.Features)
                    result.Features.Add(feature.Text);

            if (option.PostScripts != null)
                foreach (var script in option.PostScripts)
                    result.PostScripts.Add(script.Text);

            if (option.Skills != null)
                foreach (var skill in option.Skills)
                    if (skill.ScoreSpecified)
                        result.Skills.Add(skill.Name, skill.Score);
                    else
                        result.Skills.Increase(skill.Name, skill.Bonus);

            if (option.Behaviors != null)
                foreach (var behaviorMeta in option.Behaviors)
                {
                    var behavior = BehaviorList.SingleOrDefault(x => x.Name == behaviorMeta.Name);
                    if (behavior == null)
                        throw new BookException($"Chart {chart.Name} referes to unknown behavior named '{behaviorMeta.Name}'");
                    result.Behavior = result.Behavior + ", " + behavior.Name;
                    AddBehavior(result, behavior, dice);
                }
        }