Example #1
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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));
        }
Example #7
0
        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);
        }