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); }
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; } }
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; }
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); }
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; } } }