public HitPoints GenerateFor(string creatureName, CreatureType creatureType, Ability constitution, string size, int additionalHitDice = 0, bool asCharacter = false) { var hitPoints = new HitPoints(); var quantity = adjustmentSelector.SelectFrom <double>(TableNameConstants.Adjustments.HitDice, creatureName); var die = adjustmentSelector.SelectFrom <int>(TableNameConstants.Adjustments.HitDice, creatureType.Name); quantity += additionalHitDice; if (asCharacter && creatureType.Name == CreatureConstants.Types.Humanoid) { quantity--; } hitPoints.Constitution = constitution; hitPoints.Bonus = GetBonus(creatureType, size); if (quantity > 0) { hitPoints.HitDice.Add(new HitDice { Quantity = quantity, HitDie = die }); } hitPoints.RollDefaultTotal(dice); hitPoints.RollTotal(dice); return(hitPoints); }
public void SelectAdjustmentAsInt() { collections["first"] = new[] { "9266" }; collections["second"] = new[] { "42" }; var adjustment = adjustmentsSelector.SelectFrom <int>(TableName, "second"); Assert.That(adjustment, Is.EqualTo(42)); }
public int?GenerateGrappleBonus(string creature, string size, int baseAttackBonus, Ability strength) { if (!strength.HasScore) { return(null); } var sizeModifier = adjustmentsSelector.SelectFrom <int>(TableNameConstants.Adjustments.GrappleBonuses, size); var creatureModifier = adjustmentsSelector.SelectFrom <int>(TableNameConstants.Adjustments.GrappleBonuses, creature); return(baseAttackBonus + strength.Modifier + sizeModifier + creatureModifier); }
public bool IsCompatible(string creature) { var types = collectionSelector.SelectFrom(TableNameConstants.Collection.CreatureTypes, creature); if (!creatureTypes.Contains(types.First())) { return(false); } var creatureData = creatureDataSelector.SelectFor(creature); if (creatureData.LevelAdjustment.HasValue) { return(true); } var hitDice = adjustmentSelector.SelectFrom <double>(TableNameConstants.Adjustments.HitDice, creature); if (hitDice >= 5) { return(true); } return(false); }
public bool IsCompatible(string creature) { var types = collectionSelector.SelectFrom(TableNameConstants.Collection.CreatureTypes, creature); if (!creatureTypes.Contains(types.First())) { return(false); } if (types.Contains(CreatureConstants.Types.Subtypes.Incorporeal)) { return(false); } var hasSkeleton = collectionSelector.Explode(TableNameConstants.Collection.CreatureGroups, CreatureConstants.Groups.HasSkeleton); if (!hasSkeleton.Contains(creature)) { return(false); } var hitDice = adjustmentSelector.SelectFrom <double>(TableNameConstants.Adjustments.HitDice, creature); if (hitDice > 10) { return(false); } return(true); }
private int GetArcaneSpellFailure(Item item) { var arcaneSpellFailure = adjustmentsSelector.SelectFrom <int>(TableNameConstants.Adjustments.ArcaneSpellFailures, item.Name); if (item.Traits.Contains(TraitConstants.SpecialMaterials.Mithral)) { arcaneSpellFailure -= 10; } return(Math.Max(0, arcaneSpellFailure)); }
private int GetTotalSkillPoints(CreatureType creatureType, int hitDieQuantity, Ability intelligence, bool includeFirstHitDieBonus) { if (hitDieQuantity == 0 || !intelligence.HasScore) { return(0); } var points = adjustmentsSelector.SelectFrom <int>(TableNameConstants.Adjustments.SkillPoints, creatureType.Name); var perHitDie = Math.Max(1, points + intelligence.Modifier); var multiplier = hitDieQuantity; if (includeFirstHitDieBonus) { multiplier += 3; } var total = perHitDie * multiplier; return(total); }
public ArmorClass GenerateWith(Dictionary <string, Ability> abilities, string size, string creatureName, CreatureType creatureType, IEnumerable <Feat> feats, int naturalArmor, Equipment equipment) { var armorClass = new ArmorClass(); armorClass.Dexterity = abilities[AbilityConstants.Dexterity]; if (creatureType.SubTypes.Contains(CreatureConstants.Types.Subtypes.Incorporeal)) { var deflectionBonus = Math.Max(1, abilities[AbilityConstants.Charisma].Modifier); armorClass.AddBonus(ArmorClassConstants.Deflection, deflectionBonus); } armorClass.SizeModifier = adjustmentsSelector.SelectFrom <int>(TableNameConstants.Adjustments.SizeModifiers, size); var inertialArmorFeat = feats.FirstOrDefault(f => f.Name == FeatConstants.SpecialQualities.InertialArmor); if (inertialArmorFeat != null) { armorClass.AddBonus(ArmorClassConstants.Armor, inertialArmorFeat.Power); } if (feats.Any(f => f.Name == FeatConstants.SpecialQualities.UnearthlyGrace)) { armorClass.AddBonus(ArmorClassConstants.Deflection, abilities[AbilityConstants.Charisma].Modifier); } if (naturalArmor > 0) { armorClass.AddBonus(ArmorClassConstants.Natural, naturalArmor); } if (feats.Any(f => f.Name == FeatConstants.TwoWeaponDefense)) { armorClass.AddBonus(ArmorClassConstants.Shield, 1); } armorClass = GetRacialArmorClassBonuses(armorClass, creatureName, creatureType); armorClass = GetEquipmentArmorClassBonuses(armorClass, equipment); return(armorClass); }