private HitPoints UpdateCreatureHitPoints(Creature creature, CreatureType animalCreatureType, CreatureDataSelection animalData) { var animalHitPoints = hitPointsGenerator.GenerateFor(AnimalSpecies, animalCreatureType, creature.Abilities[AbilityConstants.Constitution], animalData.Size); creature.HitPoints.HitDice.Add(animalHitPoints.HitDice[0]); creature.HitPoints.RollTotal(dice); creature.HitPoints.RollDefaultTotal(dice); return(animalHitPoints); }
private Creature GeneratePrototype(string creatureName, bool asCharacter) { var creature = new Creature(); creature.Name = creatureName; var creatureData = creatureDataSelector.SelectFor(creatureName); creature.Size = creatureData.Size; creature.Space.Value = creatureData.Space; creature.Reach.Value = creatureData.Reach; creature.CanUseEquipment = creatureData.CanUseEquipment; creature.ChallengeRating = creatureData.ChallengeRating; creature.LevelAdjustment = creatureData.LevelAdjustment; creature.CasterLevel = creatureData.CasterLevel; creature.NumberOfHands = creatureData.NumberOfHands; creature.Type = GetCreatureType(creatureName); creature.Abilities = abilitiesGenerator.GenerateFor(creatureName); if (advancementSelector.IsAdvanced(creatureName)) { var advancement = advancementSelector.SelectRandomFor(creatureName, creature.Type, creature.Size, creature.ChallengeRating); creature.IsAdvanced = true; creature.Size = advancement.Size; creature.Space.Value = advancement.Space; creature.Reach.Value = advancement.Reach; creature.CasterLevel += advancement.CasterLevelAdjustment; creature.ChallengeRating = advancement.AdjustedChallengeRating; creatureData.NaturalArmor += advancement.NaturalArmorAdjustment; creature.Abilities[AbilityConstants.Strength].AdvancementAdjustment += advancement.StrengthAdjustment; creature.Abilities[AbilityConstants.Dexterity].AdvancementAdjustment += advancement.DexterityAdjustment; creature.Abilities[AbilityConstants.Constitution].AdvancementAdjustment += advancement.ConstitutionAdjustment; creature.HitPoints = hitPointsGenerator.GenerateFor( creatureName, creature.Type, creature.Abilities[AbilityConstants.Constitution], creature.Size, advancement.AdditionalHitDice, asCharacter); } else { creature.HitPoints = hitPointsGenerator.GenerateFor( creatureName, creature.Type, creature.Abilities[AbilityConstants.Constitution], creature.Size, asCharacter: asCharacter); } if (creature.HitPoints.HitDiceQuantity == 0) { creature.ChallengeRating = ChallengeRatingConstants.Zero; } creature.Alignment = alignmentGenerator.Generate(creatureName); creature.Skills = skillsGenerator.GenerateFor(creature.HitPoints, creatureName, creature.Type, creature.Abilities, creature.CanUseEquipment, creature.Size); creature.Languages = languageGenerator.GenerateWith(creatureName, creature.Abilities, creature.Skills); creature.SpecialQualities = featsGenerator.GenerateSpecialQualities( creatureName, creature.Type, creature.HitPoints, creature.Abilities, creature.Skills, creature.CanUseEquipment, creature.Size, creature.Alignment); creature.BaseAttackBonus = attacksGenerator.GenerateBaseAttackBonus(creature.Type, creature.HitPoints); creature.Attacks = attacksGenerator.GenerateAttacks( creatureName, creatureData.Size, creature.Size, creature.BaseAttackBonus, creature.Abilities, creature.HitPoints.RoundedHitDiceQuantity); creature.Feats = featsGenerator.GenerateFeats( creature.HitPoints, creature.BaseAttackBonus, creature.Abilities, creature.Skills, creature.Attacks, creature.SpecialQualities, creature.CasterLevel, creature.Speeds, creatureData.NaturalArmor, creature.NumberOfHands, creature.Size, creature.CanUseEquipment); creature.Skills = skillsGenerator.ApplyBonusesFromFeats(creature.Skills, creature.Feats, creature.Abilities); creature.HitPoints = hitPointsGenerator.RegenerateWith(creature.HitPoints, creature.Feats); creature.GrappleBonus = attacksGenerator.GenerateGrappleBonus( creatureName, creature.Size, creature.BaseAttackBonus, creature.Abilities[AbilityConstants.Strength]); var allFeats = creature.Feats.Union(creature.SpecialQualities); creature.Attacks = attacksGenerator.ApplyAttackBonuses(creature.Attacks, allFeats, creature.Abilities); creature.Attacks = equipmentGenerator.AddAttacks(allFeats, creature.Attacks, creature.NumberOfHands); creature.Equipment = equipmentGenerator.Generate( creature.Name, creature.CanUseEquipment, allFeats, creature.HitPoints.RoundedHitDiceQuantity, creature.Attacks, creature.Abilities, creature.Size); creature.Abilities = abilitiesGenerator.SetMaxBonuses(creature.Abilities, creature.Equipment); creature.Skills = skillsGenerator.SetArmorCheckPenalties(creature.Name, creature.Skills, creature.Equipment); creature.InitiativeBonus = ComputeInitiativeBonus(creature.Feats); creature.Speeds = speedsGenerator.Generate(creature.Name); creature.ArmorClass = armorClassGenerator.GenerateWith( creature.Abilities, creature.Size, creatureName, creature.Type, allFeats, creatureData.NaturalArmor, creature.Equipment); creature.Saves = savesGenerator.GenerateWith(creature.Name, creature.Type, creature.HitPoints, allFeats, creature.Abilities); creature.Magic = magicGenerator.GenerateWith(creature.Name, creature.Alignment, creature.Abilities, creature.Equipment); return(creature); }
public void GetHitDie() { var hitPoints = hitPointsGenerator.GenerateFor(CreatureName, creatureType, constitution, "size"); Assert.That(hitPoints.Bonus, Is.Zero); Assert.That(hitPoints.Constitution, Is.EqualTo(constitution)); Assert.That(hitPoints.Constitution.HasScore, Is.True); Assert.That(hitPoints.DefaultRoll, Is.EqualTo("2d90210")); Assert.That(hitPoints.DefaultTotal, Is.EqualTo(600)); Assert.That(hitPoints.HitDiceQuantity, Is.EqualTo(2)); Assert.That(hitPoints.HitDice, Has.Count.EqualTo(1)); Assert.That(hitPoints.HitDice[0].Quantity, Is.EqualTo(2)); Assert.That(hitPoints.HitDice[0].HitDie, Is.EqualTo(90210)); Assert.That(hitPoints.Total, Is.EqualTo(9266 + 42)); }