public void ModifyActionList(Magus mage, ConsideredActions alreadyConsidered, IList <string> log) { double dueDateDesire = _desirePerPoint / (Tier + 1); if (DueDate != null) { if (DueDate == 0) { log.Add("Has Covenant Condition failed"); return; } dueDateDesire /= (double)DueDate; } double currentAura = mage.Covenant.Aura.Strength; double auraCount = mage.KnownAuras.Count; double areaLore = mage.GetAbility(Abilities.AreaLore).Value; areaLore += mage.GetCastingTotal(MagicArtPairs.InVi) / 10; areaLore += mage.GetAttribute(AttributeType.Perception).Value; double probOfBetter = 1 - (currentAura * currentAura * auraCount / (5 * areaLore)); double maxAura = Math.Sqrt(5.0 * areaLore / auraCount); double averageGain = maxAura * probOfBetter / 2.0; if (probOfBetter > 0) { double desire = dueDateDesire * averageGain; log.Add("Finding a better aura to build a lab in worth " + desire.ToString("0.00")); alreadyConsidered.Add(new FindAura(Abilities.AreaLore, desire)); } }
private void AddVisUseToActionList(Ability ability, ConsideredActions alreadyConsidered, IList <string> log) { Magus mage = (Magus)Character; CharacterAbilityBase magicArt = mage.GetAbility(ability); double effectiveDesire = GetDesirabilityOfIncrease(magicArt.GetValueGain(mage.VisStudyRate)); if (!double.IsNaN(effectiveDesire) && effectiveDesire > 0) { // see if the mage has enough vis of this type double stockpile = mage.GetVisCount(ability); double visNeed = 0.5 + (magicArt.Value / 10.0); // if so, assume vis will return an average of 6XP + aura if (stockpile > visNeed) { log.Add("Studying vis for " + magicArt.Ability.AbilityName + " worth " + effectiveDesire.ToString("0.000")); VisStudying visStudy = new VisStudying(magicArt.Ability, effectiveDesire); alreadyConsidered.Add(visStudy); // TODO: how do we decrement the cost of the vis? } // putting a limit here to how far the circular loop will go else if (ConditionDepth <= 10) { List <Ability> visType = new List <Ability>(); visType.Add(magicArt.Ability); // Magus magus, uint ageToCompleteBy, double desire, Ability ability, double totalNeeded, ushort conditionDepth VisCondition visCondition = new VisCondition(mage, AgeToCompleteBy - 1, effectiveDesire, ability, visNeed, (ushort)(ConditionDepth + 1)); visCondition.AddActionPreferencesToList(alreadyConsidered, log); } } }
private void HandleAuras(Magus mage, ConsideredActions alreadyConsidered, IList <string> log) { double greatestAura = mage.KnownAuras.Select(a => a.Strength).Max(); double currentAura = mage.Covenant.Aura.Strength; if (greatestAura > currentAura) { Aura bestAura = mage.KnownAuras.Where(a => a.Strength == greatestAura).First(); if (mage.Laboratory == null) { // just move the covenant right now log.Add("Since no lab built, moving to better aura."); mage.FoundCovenant(bestAura); } else { // how do we want to rate the value of moving and having to build a new lab? // it seems like basically the same as any other single-season activity double gain = greatestAura - currentAura; double dueDateDesire = CalculateDesire(gain) / (BaseTier + 1); if (BaseDueDate != null) { if (BaseDueDate == 0) { return; } dueDateDesire /= (double)(BaseDueDate - 1); } log.Add("Moving to new aura (to boost lab total) worth " + dueDateDesire.ToString("0.00")); alreadyConsidered.Add(new BuildLaboratory(bestAura, Abilities.MagicTheory, dueDateDesire)); } } else { double auraCount = mage.KnownAuras.Count; double areaLore = mage.GetAbility(Abilities.AreaLore).Value; areaLore += mage.GetCastingTotal(MagicArtPairs.InVi) / 10; areaLore += mage.GetAttribute(AttributeType.Perception).Value; double probOfBetter = 1 - (currentAura * currentAura * auraCount / (5 * areaLore)); double maxAura = Math.Sqrt(5.0 * areaLore / auraCount); double averageGain = maxAura * probOfBetter / 2.0; double dueDateDesire = CalculateDesire(averageGain) / (BaseTier + 1); if (BaseDueDate != null) { if (BaseDueDate == 0) { return; } dueDateDesire /= (double)(BaseDueDate - 1); } if (probOfBetter > 0) { log.Add("Finding a better aura to build a lab in worth " + dueDateDesire.ToString("0.00")); alreadyConsidered.Add(new FindAura(Abilities.AreaLore, dueDateDesire)); } } }
private static void DistributeExperience(Magus mage, int extraXP, bool isAcademic, bool isMartial) { var abilities = Abilities.GetEnumerator() .Where(a => a.AbilityType == AbilityType.General || (isAcademic && a.AbilityType == AbilityType.Academic) || (isMartial && a.AbilityType == AbilityType.Martial)); int abilityCount = abilities.Count(); while (extraXP > 0) { int valueAdd = extraXP >= 5 ? 5 : extraXP; int roll = (int)(Die.Instance.RollDouble() * abilityCount); Ability ability = abilities.ElementAt(roll); if (ability.AbilityType == AbilityType.Academic) { if (mage.GetAbility(Abilities.ArtesLiberales).Value < 1) { mage.GetAbility(Abilities.ArtesLiberales).AddExperience(valueAdd); } else if (mage.GetAbility(Abilities.Latin).Value < 3) { mage.GetAbility(Abilities.Latin).AddExperience(valueAdd); } else { mage.GetAbility(ability).AddExperience(valueAdd); } } else { mage.GetAbility(ability).AddExperience(valueAdd); } extraXP -= valueAdd; } }
public FindVisSourceHelper(Magus mage, List <Ability> visTypes, uint ageToCompleteBy, double desirePerPoint, ushort conditionDepth, bool allowVimVis, CalculateDesireFunc desireFunc) : base(mage, ageToCompleteBy, desirePerPoint, conditionDepth, desireFunc) { _visTypes = visTypes; _allowVimVis = allowVimVis; _auraCount = mage.KnownAuras.Count; if (_auraCount == 0) { _currentAura = 0; _currentVis = 0; } else { // TODO: we should go to the aura with the most vis "cap space", not the largest Aura bestAura = mage.KnownAuras.Aggregate((a, b) => a.Strength > b.Strength ? a : b); _currentAura = bestAura.Strength; _currentVis = bestAura.VisSources.Sum(vs => vs.Amount); } _currentScore = mage.GetAbility(Abilities.MagicLore).Value + mage.GetAttribute(AttributeType.Perception).Value + (mage.GetCastingTotal(MagicArtPairs.InVi) / 10); }
public static void BuildBjornaer() { Bjornaer = new Magus(80); Bjornaer.Name = "Bjornaer"; Bjornaer.House = Houses.Bjornaer; Bjornaer.GetAttribute(AttributeType.Stamina).BaseValue = 3; Bjornaer.GetAttribute(AttributeType.Strength).BaseValue = 1; Bjornaer.GetAttribute(AttributeType.Dexterity).BaseValue = -2; Bjornaer.GetAttribute(AttributeType.Quickness).BaseValue = -2; Bjornaer.GetAttribute(AttributeType.Intelligence).BaseValue = 2; Bjornaer.GetAttribute(AttributeType.Communication).BaseValue = 1; Bjornaer.GetAttribute(AttributeType.Presence).BaseValue = 2; Bjornaer.GetAttribute(AttributeType.Perception).BaseValue = -1; Bjornaer.GetAbility(MagicArts.Creo).AddExperience(0); Bjornaer.GetAbility(MagicArts.Intellego).AddExperience(0); Bjornaer.GetAbility(MagicArts.Muto).AddExperience(15); Bjornaer.GetAbility(MagicArts.Perdo).AddExperience(0); Bjornaer.GetAbility(MagicArts.Rego).AddExperience(0); Bjornaer.GetAbility(MagicArts.Animal).AddExperience(15); Bjornaer.GetAbility(MagicArts.Aquam).AddExperience(0); Bjornaer.GetAbility(MagicArts.Auram).AddExperience(0); Bjornaer.GetAbility(MagicArts.Corpus).AddExperience(15); Bjornaer.GetAbility(MagicArts.Herbam).AddExperience(0); Bjornaer.GetAbility(MagicArts.Ignem).AddExperience(0); Bjornaer.GetAbility(MagicArts.Imaginem).AddExperience(0); Bjornaer.GetAbility(MagicArts.Mentem).AddExperience(0); Bjornaer.GetAbility(MagicArts.Terram).AddExperience(0); Bjornaer.GetAbility(MagicArts.Vim).AddExperience(0); Bjornaer.GetAbility(Abilities.AreaLore).AddExperience(45); Bjornaer.GetAbility(Abilities.ArtesLiberales).AddExperience(5); Bjornaer.GetAbility(Abilities.English).AddExperience(75); Bjornaer.GetAbility(Abilities.Etiquette).AddExperience(0); Bjornaer.GetAbility(Abilities.Latin).AddExperience(50); Bjornaer.GetAbility(Abilities.MagicTheory).AddExperience(30); Bjornaer.GetAbility(Abilities.ParmaMagica).AddExperience(5); Bjornaer.GetAbility(Abilities.Penetration).AddExperience(0); Bjornaer.GetAbility(Abilities.Concentration).AddExperience(0); Bjornaer.GetAbility(Abilities.Heartbeast).AddExperience(30); Bjornaer.GetAbility(Abilities.BjornaerLore).AddExperience(75); AbilityScoreGoal goal = new AbilityScoreGoal(Bjornaer, null, 1, MagicArts.Animal, 20); Bjornaer.AddGoal(goal); ApprenticeGoal apprentice = new ApprenticeGoal(Bjornaer, null, 1); Bjornaer.AddGoal(apprentice); goal = new AbilityScoreGoal(Bjornaer, null, 1.01, Abilities.BjornaerLore, 5); Bjornaer.AddGoal(goal); goal = new AbilityScoreGoal(Bjornaer, null, 1.02, Abilities.Heartbeast, 5); Bjornaer.AddGoal(goal); }
public static void BuildBonisagus() { Bonisgaus = new Magus(80); Bonisgaus.Name = "Bonisagus"; Bonisgaus.House = Houses.Bonisagus; Bonisgaus.GetAttribute(AttributeType.Stamina).BaseValue = 1; Bonisgaus.GetAttribute(AttributeType.Strength).BaseValue = -2; Bonisgaus.GetAttribute(AttributeType.Dexterity).BaseValue = -2; Bonisgaus.GetAttribute(AttributeType.Quickness).BaseValue = -2; Bonisgaus.GetAttribute(AttributeType.Intelligence).BaseValue = 5; Bonisgaus.GetAttribute(AttributeType.Communication).BaseValue = 2; Bonisgaus.GetAttribute(AttributeType.Presence).BaseValue = -2; Bonisgaus.GetAttribute(AttributeType.Perception).BaseValue = 0; Bonisgaus.GetAbility(MagicArts.Creo).AddExperience(1); Bonisgaus.GetAbility(MagicArts.Intellego).AddExperience(1); Bonisgaus.GetAbility(MagicArts.Muto).AddExperience(1); Bonisgaus.GetAbility(MagicArts.Perdo).AddExperience(1); Bonisgaus.GetAbility(MagicArts.Rego).AddExperience(1); Bonisgaus.GetAbility(MagicArts.Animal).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Aquam).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Auram).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Corpus).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Herbam).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Ignem).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Imaginem).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Mentem).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Terram).AddExperience(0); Bonisgaus.GetAbility(MagicArts.Vim).AddExperience(55); Bonisgaus.GetAbility(Abilities.AreaLore).AddExperience(0); Bonisgaus.GetAbility(Abilities.ArtesLiberales).AddExperience(15); Bonisgaus.GetAbility(Abilities.English).AddExperience(75); Bonisgaus.GetAbility(Abilities.Etiquette).AddExperience(45); Bonisgaus.GetAbility(Abilities.Latin).AddExperience(75); Bonisgaus.GetAbility(Abilities.MagicTheory).AddExperience(75); Bonisgaus.GetAbility(Abilities.ParmaMagica).AddExperience(5); Bonisgaus.GetAbility(Abilities.Penetration).AddExperience(5); Bonisgaus.GetAbility(Abilities.Concentration).AddExperience(5); AbilityScoreGoal goal = new AbilityScoreGoal(Bonisgaus, null, 1, Abilities.MagicTheory, 10); Bonisgaus.AddGoal(goal); ApprenticeGoal apprentice = new ApprenticeGoal(Bonisgaus, null, 1); Bonisgaus.AddGoal(apprentice); }
public static void BuildTytalus() { Tytalus = new Magus(80); Tytalus.Name = "Tytalus"; Tytalus.House = Houses.Tytalus; Tytalus.GetAttribute(AttributeType.Stamina).BaseValue = 3; Tytalus.GetAttribute(AttributeType.Strength).BaseValue = 0; Tytalus.GetAttribute(AttributeType.Dexterity).BaseValue = 0; Tytalus.GetAttribute(AttributeType.Quickness).BaseValue = -1; Tytalus.GetAttribute(AttributeType.Intelligence).BaseValue = 2; Tytalus.GetAttribute(AttributeType.Communication).BaseValue = -2; Tytalus.GetAttribute(AttributeType.Presence).BaseValue = -1; Tytalus.GetAttribute(AttributeType.Perception).BaseValue = 2; Tytalus.GetAbility(MagicArts.Creo).AddExperience(0); Tytalus.GetAbility(MagicArts.Intellego).AddExperience(0); Tytalus.GetAbility(MagicArts.Muto).AddExperience(10); Tytalus.GetAbility(MagicArts.Perdo).AddExperience(15); Tytalus.GetAbility(MagicArts.Rego).AddExperience(55); Tytalus.GetAbility(MagicArts.Animal).AddExperience(0); Tytalus.GetAbility(MagicArts.Aquam).AddExperience(0); Tytalus.GetAbility(MagicArts.Auram).AddExperience(0); Tytalus.GetAbility(MagicArts.Corpus).AddExperience(0); Tytalus.GetAbility(MagicArts.Herbam).AddExperience(0); Tytalus.GetAbility(MagicArts.Ignem).AddExperience(0); Tytalus.GetAbility(MagicArts.Imaginem).AddExperience(0); Tytalus.GetAbility(MagicArts.Mentem).AddExperience(0); Tytalus.GetAbility(MagicArts.Terram).AddExperience(0); Tytalus.GetAbility(MagicArts.Vim).AddExperience(0); Tytalus.GetAbility(Abilities.AreaLore).AddExperience(30); Tytalus.GetAbility(Abilities.ArtesLiberales).AddExperience(5); Tytalus.GetAbility(Abilities.English).AddExperience(75); Tytalus.GetAbility(Abilities.Etiquette).AddExperience(15); Tytalus.GetAbility(Abilities.Latin).AddExperience(50); Tytalus.GetAbility(Abilities.MagicTheory).AddExperience(30); Tytalus.GetAbility(Abilities.ParmaMagica).AddExperience(30); Tytalus.GetAbility(Abilities.Penetration).AddExperience(30); Tytalus.GetAbility(Abilities.Concentration).AddExperience(15); AbilityScoreGoal goal = new AbilityScoreGoal(Tremere, null, 1, MagicArts.Rego, 20); Tytalus.AddGoal(goal); goal = new AbilityScoreGoal(Tremere, null, 1, MagicArts.Mentem, 10); Tytalus.AddGoal(goal); goal = new AbilityScoreGoal(Tremere, null, 1, Abilities.Penetration, 5); Tytalus.AddGoal(goal); goal = new AbilityScoreGoal(Tremere, null, 1, Abilities.Finesse, 5); Tytalus.AddGoal(goal); ApprenticeGoal app = new ApprenticeGoal(Tremere, null, 1); Tytalus.AddGoal(app); }
public static void BuildVerditius() { Verditius = new Magus(80); Verditius.Name = "Verditius"; Verditius.House = Houses.Verditius; Verditius.GetAttribute(AttributeType.Stamina).BaseValue = 1; Verditius.GetAttribute(AttributeType.Strength).BaseValue = 0; Verditius.GetAttribute(AttributeType.Dexterity).BaseValue = 2; Verditius.GetAttribute(AttributeType.Quickness).BaseValue = -3; Verditius.GetAttribute(AttributeType.Intelligence).BaseValue = 3; Verditius.GetAttribute(AttributeType.Communication).BaseValue = -2; Verditius.GetAttribute(AttributeType.Presence).BaseValue = 2; Verditius.GetAttribute(AttributeType.Perception).BaseValue = 2; Verditius.GetAbility(MagicArts.Creo).AddExperience(15); Verditius.GetAbility(MagicArts.Intellego).AddExperience(0); Verditius.GetAbility(MagicArts.Muto).AddExperience(0); Verditius.GetAbility(MagicArts.Perdo).AddExperience(0); Verditius.GetAbility(MagicArts.Rego).AddExperience(15); Verditius.GetAbility(MagicArts.Animal).AddExperience(0); Verditius.GetAbility(MagicArts.Aquam).AddExperience(0); Verditius.GetAbility(MagicArts.Auram).AddExperience(0); Verditius.GetAbility(MagicArts.Corpus).AddExperience(0); Verditius.GetAbility(MagicArts.Herbam).AddExperience(0); Verditius.GetAbility(MagicArts.Ignem).AddExperience(0); Verditius.GetAbility(MagicArts.Imaginem).AddExperience(0); Verditius.GetAbility(MagicArts.Mentem).AddExperience(0); Verditius.GetAbility(MagicArts.Terram).AddExperience(15); Verditius.GetAbility(MagicArts.Vim).AddExperience(15); Verditius.GetAbility(Abilities.AreaLore).AddExperience(15); Verditius.GetAbility(Abilities.ArtesLiberales).AddExperience(30); Verditius.GetAbility(Abilities.English).AddExperience(75); Verditius.GetAbility(Abilities.Etiquette).AddExperience(30); Verditius.GetAbility(Abilities.Latin).AddExperience(75); Verditius.GetAbility(Abilities.MagicTheory).AddExperience(30); Verditius.GetAbility(Abilities.ParmaMagica).AddExperience(5); Verditius.GetAbility(Abilities.Penetration).AddExperience(5); Verditius.GetAbility(Abilities.Craft).AddExperience(30); Verditius.GetAbility(Abilities.Philosophae).AddExperience(5); AbilityScoreGoal goal = new AbilityScoreGoal(Verditius, null, 1, MagicArts.Intellego, 5); Verditius.AddGoal(goal); goal = new AbilityScoreGoal(Verditius, null, 1, MagicArts.Muto, 5); Verditius.AddGoal(goal); goal = new AbilityScoreGoal(Verditius, null, 1, MagicArts.Perdo, 5); Verditius.AddGoal(goal); goal = new AbilityScoreGoal(Verditius, null, 1, MagicArts.Rego, 5); Verditius.AddGoal(goal); goal = new AbilityScoreGoal(Verditius, null, 1, MagicArts.Terram, 20); Verditius.AddGoal(goal); goal = new AbilityScoreGoal(Verditius, null, 1, Abilities.Philosophae, 4); Verditius.AddGoal(goal); goal = new AbilityScoreGoal(Verditius, null, 1, Abilities.Craft, 5); Verditius.AddGoal(goal); ApprenticeGoal app = new ApprenticeGoal(Verditius, null, 1); Verditius.AddGoal(app); }
public static void BuildFlambeau() { Flambeau = new Magus(80); Flambeau.Name = "Flambeau"; Flambeau.House = Houses.Flambeau; Flambeau.GetAttribute(AttributeType.Stamina).BaseValue = 2; Flambeau.GetAttribute(AttributeType.Strength).BaseValue = 2; Flambeau.GetAttribute(AttributeType.Dexterity).BaseValue = 2; Flambeau.GetAttribute(AttributeType.Quickness).BaseValue = 0; Flambeau.GetAttribute(AttributeType.Intelligence).BaseValue = 1; Flambeau.GetAttribute(AttributeType.Communication).BaseValue = -2; Flambeau.GetAttribute(AttributeType.Presence).BaseValue = 2; Flambeau.GetAttribute(AttributeType.Perception).BaseValue = -2; Flambeau.GetAbility(MagicArts.Creo).AddExperience(3); Flambeau.GetAbility(MagicArts.Intellego).AddExperience(0); Flambeau.GetAbility(MagicArts.Muto).AddExperience(0); Flambeau.GetAbility(MagicArts.Perdo).AddExperience(3); Flambeau.GetAbility(MagicArts.Rego).AddExperience(3); Flambeau.GetAbility(MagicArts.Animal).AddExperience(0); Flambeau.GetAbility(MagicArts.Aquam).AddExperience(0); Flambeau.GetAbility(MagicArts.Auram).AddExperience(0); Flambeau.GetAbility(MagicArts.Corpus).AddExperience(0); Flambeau.GetAbility(MagicArts.Herbam).AddExperience(0); Flambeau.GetAbility(MagicArts.Ignem).AddExperience(21); Flambeau.GetAbility(MagicArts.Imaginem).AddExperience(0); Flambeau.GetAbility(MagicArts.Mentem).AddExperience(0); Flambeau.GetAbility(MagicArts.Terram).AddExperience(0); Flambeau.GetAbility(MagicArts.Vim).AddExperience(0); Flambeau.GetAbility(Abilities.AreaLore).AddExperience(15); Flambeau.GetAbility(Abilities.ArtesLiberales).AddExperience(15); Flambeau.GetAbility(Abilities.English).AddExperience(75); Flambeau.GetAbility(Abilities.Etiquette).AddExperience(30); Flambeau.GetAbility(Abilities.Latin).AddExperience(75); Flambeau.GetAbility(Abilities.MagicTheory).AddExperience(30); Flambeau.GetAbility(Abilities.ParmaMagica).AddExperience(30); Flambeau.GetAbility(Abilities.Penetration).AddExperience(30); Flambeau.GetAbility(Abilities.Concentration).AddExperience(30); AbilityScoreGoal goal = new AbilityScoreGoal(Flambeau, null, 1, MagicArts.Ignem, 20); Flambeau.AddGoal(goal); goal = new AbilityScoreGoal(Flambeau, null, 1, Abilities.Penetration, 5); Flambeau.AddGoal(goal); goal = new AbilityScoreGoal(Flambeau, null, 1, Abilities.ParmaMagica, 5); Flambeau.AddGoal(goal); ApprenticeGoal app = new ApprenticeGoal(Flambeau, null, 1); Flambeau.AddGoal(app); }
public static void BuildMerinita() { Merinita = new Magus(80); Merinita.Name = "Merinita"; Merinita.House = Houses.Merinita; Merinita.GetAttribute(AttributeType.Stamina).BaseValue = 0; Merinita.GetAttribute(AttributeType.Strength).BaseValue = -1; Merinita.GetAttribute(AttributeType.Dexterity).BaseValue = 0; Merinita.GetAttribute(AttributeType.Quickness).BaseValue = 0; Merinita.GetAttribute(AttributeType.Intelligence).BaseValue = 1; Merinita.GetAttribute(AttributeType.Communication).BaseValue = 1; Merinita.GetAttribute(AttributeType.Presence).BaseValue = 3; Merinita.GetAttribute(AttributeType.Perception).BaseValue = 0; Merinita.GetAbility(MagicArts.Creo).AddExperience(10); Merinita.GetAbility(MagicArts.Intellego).AddExperience(15); Merinita.GetAbility(MagicArts.Muto).AddExperience(15); Merinita.GetAbility(MagicArts.Perdo).AddExperience(10); Merinita.GetAbility(MagicArts.Rego).AddExperience(10); Merinita.GetAbility(MagicArts.Animal).AddExperience(0); Merinita.GetAbility(MagicArts.Aquam).AddExperience(0); Merinita.GetAbility(MagicArts.Auram).AddExperience(0); Merinita.GetAbility(MagicArts.Corpus).AddExperience(0); Merinita.GetAbility(MagicArts.Herbam).AddExperience(55); Merinita.GetAbility(MagicArts.Ignem).AddExperience(0); Merinita.GetAbility(MagicArts.Imaginem).AddExperience(0); Merinita.GetAbility(MagicArts.Mentem).AddExperience(0); Merinita.GetAbility(MagicArts.Terram).AddExperience(15); Merinita.GetAbility(MagicArts.Vim).AddExperience(0); Merinita.GetAbility(Abilities.AreaLore).AddExperience(15); Merinita.GetAbility(Abilities.ArtesLiberales).AddExperience(5); Merinita.GetAbility(Abilities.English).AddExperience(75); Merinita.GetAbility(Abilities.Etiquette).AddExperience(15); Merinita.GetAbility(Abilities.Latin).AddExperience(50); Merinita.GetAbility(Abilities.MagicTheory).AddExperience(15); Merinita.GetAbility(Abilities.ParmaMagica).AddExperience(5); Merinita.GetAbility(Abilities.Penetration).AddExperience(0); Merinita.GetAbility(Abilities.MerinitaLore).AddExperience(50); AbilityScoreGoal goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Herbam, 20); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Animal, 15); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Creo, 5); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Intellego, 5); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Muto, 5); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Perdo, 5); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, MagicArts.Rego, 5); Merinita.AddGoal(goal); goal = new AbilityScoreGoal(Merinita, null, 1, Abilities.MerinitaLore, 5); Merinita.AddGoal(goal); }
public static void BuildCriamon() { Criamon = new Magus(80); Criamon.Name = "Criamon"; Criamon.House = Houses.Criamon; Criamon.GetAttribute(AttributeType.Stamina).BaseValue = 1; Criamon.GetAttribute(AttributeType.Strength).BaseValue = -2; Criamon.GetAttribute(AttributeType.Dexterity).BaseValue = -2; Criamon.GetAttribute(AttributeType.Quickness).BaseValue = 1; Criamon.GetAttribute(AttributeType.Intelligence).BaseValue = 2; Criamon.GetAttribute(AttributeType.Communication).BaseValue = -1; Criamon.GetAttribute(AttributeType.Presence).BaseValue = 3; Criamon.GetAttribute(AttributeType.Perception).BaseValue = 2; Criamon.GetAbility(MagicArts.Creo).AddExperience(0); Criamon.GetAbility(MagicArts.Intellego).AddExperience(15); Criamon.GetAbility(MagicArts.Muto).AddExperience(0); Criamon.GetAbility(MagicArts.Perdo).AddExperience(0); Criamon.GetAbility(MagicArts.Rego).AddExperience(0); Criamon.GetAbility(MagicArts.Animal).AddExperience(0); Criamon.GetAbility(MagicArts.Aquam).AddExperience(0); Criamon.GetAbility(MagicArts.Auram).AddExperience(0); Criamon.GetAbility(MagicArts.Corpus).AddExperience(0); Criamon.GetAbility(MagicArts.Herbam).AddExperience(0); Criamon.GetAbility(MagicArts.Ignem).AddExperience(0); Criamon.GetAbility(MagicArts.Imaginem).AddExperience(0); Criamon.GetAbility(MagicArts.Mentem).AddExperience(0); Criamon.GetAbility(MagicArts.Terram).AddExperience(0); Criamon.GetAbility(MagicArts.Vim).AddExperience(15); Criamon.GetAbility(Abilities.AreaLore).AddExperience(30); Criamon.GetAbility(Abilities.ArtesLiberales).AddExperience(30); Criamon.GetAbility(Abilities.English).AddExperience(75); Criamon.GetAbility(Abilities.Etiquette).AddExperience(15); Criamon.GetAbility(Abilities.Latin).AddExperience(50); Criamon.GetAbility(Abilities.MagicTheory).AddExperience(50); Criamon.GetAbility(Abilities.ParmaMagica).AddExperience(5); Criamon.GetAbility(Abilities.Penetration).AddExperience(0); Criamon.GetAbility(Abilities.Concentration).AddExperience(30); Criamon.GetAbility(Abilities.EnigmaticWisdom).AddExperience(15); Criamon.GetAbility(Abilities.CriamonLore).AddExperience(30); AbilityScoreGoal goal = new AbilityScoreGoal(Criamon, null, 1, Abilities.MagicTheory, 5); Criamon.AddGoal(goal); goal = new AbilityScoreGoal(Criamon, null, 1, Abilities.EnigmaticWisdom, 5); Criamon.AddGoal(goal); goal = new AbilityScoreGoal(Criamon, null, 1, Abilities.CriamonLore, 5); Criamon.AddGoal(goal); ApprenticeGoal app = new ApprenticeGoal(Criamon, null, 1); Criamon.AddGoal(app); }
public static void BuildDiedne() { Diedne = new Magus(80); Diedne.Name = "Diedne"; Diedne.House = Houses.Diedne; Diedne.GetAttribute(AttributeType.Stamina).BaseValue = 1; Diedne.GetAttribute(AttributeType.Strength).BaseValue = -2; Diedne.GetAttribute(AttributeType.Dexterity).BaseValue = 0; Diedne.GetAttribute(AttributeType.Quickness).BaseValue = 0; Diedne.GetAttribute(AttributeType.Intelligence).BaseValue = 1; Diedne.GetAttribute(AttributeType.Communication).BaseValue = 1; Diedne.GetAttribute(AttributeType.Presence).BaseValue = 3; Diedne.GetAttribute(AttributeType.Perception).BaseValue = 1; Diedne.GetAbility(MagicArts.Creo).AddExperience(12); Diedne.GetAbility(MagicArts.Intellego).AddExperience(12); Diedne.GetAbility(MagicArts.Muto).AddExperience(12); Diedne.GetAbility(MagicArts.Perdo).AddExperience(12); Diedne.GetAbility(MagicArts.Rego).AddExperience(12); Diedne.GetAbility(MagicArts.Animal).AddExperience(6); Diedne.GetAbility(MagicArts.Aquam).AddExperience(6); Diedne.GetAbility(MagicArts.Auram).AddExperience(6); Diedne.GetAbility(MagicArts.Corpus).AddExperience(6); Diedne.GetAbility(MagicArts.Herbam).AddExperience(6); Diedne.GetAbility(MagicArts.Ignem).AddExperience(6); Diedne.GetAbility(MagicArts.Imaginem).AddExperience(6); Diedne.GetAbility(MagicArts.Mentem).AddExperience(6); Diedne.GetAbility(MagicArts.Terram).AddExperience(6); Diedne.GetAbility(MagicArts.Vim).AddExperience(6); Diedne.GetAbility(Abilities.AreaLore).AddExperience(30); Diedne.GetAbility(Abilities.ArtesLiberales).AddExperience(0); Diedne.GetAbility(Abilities.English).AddExperience(75); Diedne.GetAbility(Abilities.Etiquette).AddExperience(15); Diedne.GetAbility(Abilities.Latin).AddExperience(0); Diedne.GetAbility(Abilities.MagicTheory).AddExperience(30); Diedne.GetAbility(Abilities.ParmaMagica).AddExperience(30); Diedne.GetAbility(Abilities.Penetration).AddExperience(30); Diedne.GetAbility(Abilities.Concentration).AddExperience(30); AbilityScoreGoal goal = new AbilityScoreGoal(Diedne, null, 5, MagicArts.Creo, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1.05, MagicArts.Intellego, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1.05, MagicArts.Muto, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1.05, MagicArts.Perdo, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1.05, MagicArts.Rego, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1.05, MagicArts.Animal, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Aquam, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Corpus, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Herbam, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Ignem, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Imaginem, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Mentem, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Terram, 5); Diedne.AddGoal(goal); goal = new AbilityScoreGoal(Diedne, null, 1, MagicArts.Vim, 5); Diedne.AddGoal(goal); ApprenticeGoal app = new ApprenticeGoal(Diedne, null, 1); Diedne.AddGoal(app); }
public void ModifyActionList(Magus mage, ConsideredActions alreadyConsidered, IList<string> log) { double dueDateDesire = _desirePerPoint / (Tier + 1); if (DueDate != null) { if (DueDate == 0) { log.Add("Has Covenant Condition failed"); return; } dueDateDesire /= (double)DueDate; } double currentAura = mage.Covenant.Aura.Strength; double auraCount = mage.KnownAuras.Count; double areaLore = mage.GetAbility(Abilities.AreaLore).Value; areaLore += mage.GetCastingTotal(MagicArtPairs.InVi) / 10; areaLore += mage.GetAttribute(AttributeType.Perception).Value; double probOfBetter = 1 - (currentAura * currentAura * auraCount / (5 * areaLore)); double maxAura = Math.Sqrt(5.0 * areaLore / auraCount); double averageGain = maxAura * probOfBetter / 2.0; if (probOfBetter > 0) { double desire = dueDateDesire * averageGain; log.Add("Finding a better aura to build a lab in worth " + desire.ToString("0.00")); alreadyConsidered.Add(new FindAura(Abilities.AreaLore, desire)); } }
public static Magus GenerateNewApprentice() { Magus magus = new Magus(Abilities.MagicTheory, Abilities.Latin, Abilities.ArtesLiberales, Abilities.AreaLore); NormalizeAttributes(magus); magus.GetAbility(Abilities.English).AddExperience(75); // randomly assign 45 points to childhood skills in 5 point blocks // Area Lore, Athletics, Awareness, Brawl, Charm, Folk Ken, Guile, Stealth, Survival, Swim double experienceBlock = 5.0; CharacterAbilityBase charAbility = null; for (byte i = 0; i < 9; i++) { switch (Die.Instance.RollSimpleDie()) { case 1: charAbility = magus.GetAbility(Abilities.AreaLore); break; case 2: charAbility = magus.GetAbility(Abilities.Athletics); break; case 3: charAbility = magus.GetAbility(Abilities.Awareness); break; case 4: charAbility = magus.GetAbility(Abilities.Brawl); break; case 5: charAbility = magus.GetAbility(Abilities.Charm); break; case 6: charAbility = magus.GetAbility(Abilities.FolkKen); break; case 7: charAbility = magus.GetAbility(Abilities.Guile); break; case 8: charAbility = magus.GetAbility(Abilities.Stealth); break; case 9: charAbility = magus.GetAbility(Abilities.Survival); break; case 10: charAbility = magus.GetAbility(Abilities.Swim); break; } charAbility.AddExperience(experienceBlock); } // figure out how much older than 5 the child is ushort age = (ushort)(20 + Die.Instance.RollDouble() * 80); // add experience for the additional time. int extraXP = (age - 20) * 4; // for now, lets say 10% chance of academics, 20% of martial bool isAcademic = Die.Instance.RollSimpleDie() == 1; bool isMartial = Die.Instance.RollSimpleDie() <= 2; DistributeExperience(magus, extraXP, isAcademic, isMartial); // TODO: how do we initialize the goals of this new apprentice? InitializeApprenticeGoals(magus); return(magus); }
private void HandleAuras(Magus mage, ConsideredActions alreadyConsidered, IList<string> log) { double greatestAura = mage.KnownAuras.Select(a => a.Strength).Max(); double currentAura = mage.Covenant.Aura.Strength; if (greatestAura > currentAura) { Aura bestAura = mage.KnownAuras.Where(a => a.Strength == greatestAura).First(); if (mage.Laboratory == null) { // just move the covenant right now log.Add("Since no lab built, moving to better aura."); mage.FoundCovenant(bestAura); } else { // how do we want to rate the value of moving and having to build a new lab? // it seems like basically the same as any other single-season activity double gain = greatestAura - currentAura; double dueDateDesire = CalculateDesire(gain) / (BaseTier + 1); if (BaseDueDate != null) { if (BaseDueDate == 0) { return; } dueDateDesire /= (double)(BaseDueDate - 1); } log.Add("Moving to new aura (to boost lab total) worth " + dueDateDesire.ToString("0.00")); alreadyConsidered.Add(new BuildLaboratory(bestAura, Abilities.MagicTheory, dueDateDesire)); } } else { double auraCount = mage.KnownAuras.Count; double areaLore = mage.GetAbility(Abilities.AreaLore).Value; areaLore += mage.GetCastingTotal(MagicArtPairs.InVi) / 10; areaLore += mage.GetAttribute(AttributeType.Perception).Value; double probOfBetter = 1 - (currentAura * currentAura * auraCount / (5 * areaLore)); double maxAura = Math.Sqrt(5.0 * areaLore / auraCount); double averageGain = maxAura * probOfBetter / 2.0; double dueDateDesire = CalculateDesire(averageGain) / (BaseTier + 1); if (BaseDueDate != null) { if (BaseDueDate == 0) { return; } dueDateDesire /= (double)(BaseDueDate - 1); } if (probOfBetter > 0) { log.Add("Finding a better aura to build a lab in worth " + dueDateDesire.ToString("0.00")); alreadyConsidered.Add(new FindAura(Abilities.AreaLore, dueDateDesire)); } } }