コード例 #1
0
        void ApplyRace(Character result)
        {
            //Add the race
            result.Race = SelectedRace.Name;
            if (SelectedRace.Edges != null)
                foreach (var item in SelectedRace.Edges)
                {
                    //Lookup the edge defintion. If not found, assume this edge is custom for the race.
                    var edge = Edges.SingleOrDefault(e => e.Name == item.Name) ?? item;
                    ApplyEdge(result, edge);
                }

            if (SelectedRace.Skills != null)
                foreach (var item in SelectedRace.Skills)
                {
                    var skill = result.Skills[item.Name];
                    if (skill != null)
                        skill.Trait = Math.Max(skill.Trait.Score, item.Level);
                    else
                        result.Skills.Add(new Skill(item.Name, item.Attribute) { Trait = item.Level });
                }
            if (SelectedRace.Traits != null)
                foreach (var item in SelectedRace.Traits)
                    result.Increment(item.Name, item.Bonus);
        }
コード例 #2
0
        void ApplyHindrance(Character result, SettingHindrance hindrance, int level)
        {
            result.Hindrances.Add(new Hindrance() { Name = hindrance.Name, Description = hindrance.Description, Level = level });

            if (hindrance.Trait != null)
                foreach (var item in hindrance.Trait)
                    result.Increment(item.Name, item.Bonus);

            if (hindrance.Features != null)
                foreach (var item in hindrance.Features)
                    result.Features.Add(item.Name);

            if (hindrance.Skill != null)
                foreach (var item in hindrance.Skill)
                {
                    var skill = result.Skills.FirstOrDefault(s => s.Name == item.Name);

                    if (skill == null)
                        result.Skills.Add(new Skill(item.Name, item.Attribute) { Trait = item.Level });
                    else if (skill.Trait < item.Level)
                        skill.Trait = item.Level;
                }
        }
コード例 #3
0
        static void PickAttribute(Character result, Dice dice)
        {
            //Attributes are likely to stack rather than spread evenly
            var table = new Table<string>();
            if (result.Vigor < 12)
                table.Add("Vigor", result.Vigor.Score);
            if (result.Smarts < 12)
                table.Add("Smarts", result.Smarts.Score);
            if (result.Agility < 12)
                table.Add("Agility", result.Agility.Score);
            if (result.Strength < 12)
                table.Add("Strength", result.Strength.Score);
            if (result.Spirit < 12)
                table.Add("Spirit", result.Spirit.Score);

            result.Increment(table.RandomChoose(dice));

            result.UnusedAttributes -= 1;
        }
コード例 #4
0
        void ApplyArchetype(Character result)
        {
            //Add the archetype
            result.Archetype = SelectedArchetype.Name;
            result.UnusedAttributes = SelectedArchetype.UnusedAttributes;
            result.UnusedSkills = SelectedArchetype.UnusedSkills;
            result.Agility = SelectedArchetype.Agility;
            result.Smarts = SelectedArchetype.Smarts;
            result.Spirit = SelectedArchetype.Spirit;
            result.Strength = SelectedArchetype.Strength;
            result.Vigor = SelectedArchetype.Vigor;

            //edges first because they can create new skills
            if (SelectedArchetype.Edges != null)
                foreach (var item in SelectedArchetype.Edges)
                {
                    //Lookup the edge defintion. If not found, assume this edge is custom for the archetype.
                    var edge = Edges.SingleOrDefault(e => e.Name == item.Name) ?? item;
                    ApplyEdge(result, edge);
                }

            if (SelectedArchetype.Skills != null)
                foreach (var item in SelectedArchetype.Skills)
                {
                    var skill = result.Skills[item.Name];
                    if (skill != null)
                        skill.Trait = Math.Max(skill.Trait.Score, item.Level);
                    else
                        result.Skills.Add(new Skill(item.Name, item.Attribute) { Trait = item.Level });
                }
            if (SelectedArchetype.Traits != null)
                foreach (var item in SelectedArchetype.Traits)
                    result.Increment(item.Name, item.Bonus);
        }
コード例 #5
0
        static void ApplyEdge(Character result, SettingEdge edge)
        {
            result.Edges.Add(new Edge() { Name = edge.Name, Description = edge.Description, UniqueGroup = edge.UniqueGroup });

            if (edge.Traits != null)
                foreach (var item in edge.Traits)
                    result.Increment(item.Name, item.Bonus);

            if (edge.Features != null)
                foreach (var item in edge.Features)
                    result.Features.Add(item.Name);

            if (edge.Skills != null)
                foreach (var item in edge.Skills)
                {
                    var skill = result.Skills.FirstOrDefault(s => s.Name == item.Name);
                    if (skill == null)
                    {
                        result.Skills.Add(new Skill(item.Name, item.Attribute) { Trait = item.Level });
                    }
                    else if (skill.Trait < item.Level)
                    {
                        skill.Trait = item.Level;
                    }
                }
        }