Example #1
0
        public PurchaseMeleeWeaponTests()
        {
            var weapons = new List <Weapon> ();
            var wpn1    = new Weapon("Mace", 0f, "1d6",
                                     DamageTypes.Bludgeoning, 20, 2, 0,
                                     WeaponType.OneHanded, WeaponGroup.Hammers,
                                     WeaponTrainingLevel.Simple);

            wpn1.Value = 3000;
            var wpn2 = new Weapon("Bow", 0, "1d6",
                                  DamageTypes.Piercing, 20, 2, 0,
                                  WeaponType.Ranged, WeaponGroup.Bows,
                                  WeaponTrainingLevel.Martial);
            var wpn3 = new Weapon("Never Pick", 0, "1d6",
                                  DamageTypes.Piercing, 20, 2, 0,
                                  WeaponType.Ranged, WeaponGroup.Bows,
                                  WeaponTrainingLevel.Exotic);

            weapons.Add(wpn1);
            weapons.Add(wpn2);
            weapons.Add(wpn3);
            shop    = new WeaponShop(weapons);
            subject = new PurchaseMeleeWeapon(shop);

            var proficiencies = new string[] { "simple" };

            character = CharacterTestTemplates.AverageBob();
            character.Inventory.CoinPurse.SetValue(30000);
            character.Offense.AddWeaponProficiencies(proficiencies);
        }
Example #2
0
        public FlurryOfBlowsTests()
        {
            monk = CharacterTestTemplates.MarkyMonk();
            var strike = new MonkUnarmedStrike();

            monk.Add(strike);
        }
Example #3
0
        public void ConfiguresTheAttacksBasedOnAttributesOfTheCharacter()
        {
            var sorcerer = CharacterTestTemplates.Sorcerer();
            var claws    = new Claws();

            sorcerer.Add(claws);

            Assert.Equal(2, claws.NumberOfAttacks);
            Assert.Equal(2, claws.CriticalModifier.TotalValue);
            Assert.Equal(20, claws.CriticalThreat);
            Assert.Equal(AttackTypes.Special, claws.AttackType);
            Assert.Equal(0, claws.SaveDC);
            Assert.Equal(0, claws.Range);

            Assert.Equal(3, claws.RoundsPerDay);
            sorcerer.AbilityScores.SetScore(AbilityScoreTypes.Charisma, 16);
            Assert.Equal(6, claws.RoundsPerDay);

            Assert.Equal("1d4", claws.Damage.ToString());
            sorcerer.AbilityScores.SetScore(AbilityScoreTypes.Strength, 16);
            Assert.Equal("1d4+3", claws.Damage.ToString());

            Assert.Equal(3, claws.AttackBonus.TotalValue);

            Assert.Equal("2 claws +3 (1d4+3) 6 rounds/day", claws.DisplayString());
        }
Example #4
0
        public void HasAttributesLoadedThatSpecifySpecialAbilities()
        {
            var c = CharacterTestTemplates.AverageBob();

            c.Add(dwarf);
            AssertCharacter.ContainsFeature("Darkvision", c);
        }
Example #5
0
        public void CanBeUsedAnExtraTimeADayEveryTwoDruidLevelsAfterFourth()
        {
            var wildShape = new WildShape();
            var donna     = CharacterTestTemplates.DruidDonna();

            donna.Add(wildShape);

            donna.SetLevel(6);
            Assert.Equal(2, wildShape.UsesPerDay);

            donna.SetLevel(8);
            Assert.Equal(3, wildShape.UsesPerDay);

            donna.SetLevel(12);
            Assert.Equal(5, wildShape.UsesPerDay);

            donna.SetLevel(13);
            Assert.Equal(5, wildShape.UsesPerDay);

            donna.SetLevel(17);
            Assert.Equal(7, wildShape.UsesPerDay);

            donna.SetLevel(18);
            Assert.Equal(8, wildShape.UsesPerDay);
            Assert.Equal("Wild Shape (8/day)", wildShape.DisplayString());
        }
Example #6
0
        public void CanGetTheCharacterSheet()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal(bob, context.GetValue <CharacterSheet>("charactersheet"));
        }
Example #7
0
        public void ChooseAnAbilityAndApplyTheModifierToIt()
        {
            var wizard  = CharacterTestTemplates.Wizard();
            var enhance = new PhysicalEnhancement();

            wizard.Add(enhance);

            //Modifiers have to equal one with the bonus
            Assert.Equal
            (
                31,
                wizard.AbilityScores.GetScore(AbilityScoreTypes.Strength) +
                wizard.AbilityScores.GetScore(AbilityScoreTypes.Dexterity) +
                wizard.AbilityScores.GetScore(AbilityScoreTypes.Constitution)
            );

            wizard.SetLevel(15);

            Assert.Equal
            (
                34,
                wizard.AbilityScores.GetScore(AbilityScoreTypes.Strength) +
                wizard.AbilityScores.GetScore(AbilityScoreTypes.Dexterity) +
                wizard.AbilityScores.GetScore(AbilityScoreTypes.Constitution)
            );
        }
Example #8
0
        public void AddsDiceToTheStatisticBasedOnLevelOfCharacter()
        {
            var character = CharacterTestTemplates.Cleric();
            var diceStat  = new DiceStatistic("stat-name", "1d6");

            character.Add(diceStat);
            //Example based on channel energy
            var yaml = @"---
name: stat-name
class: cleric
dice: 1d6
rate: 2
start-level: 1";
            var mod  = new DiceClassLevelModifier(yaml.ParseYaml());

            character.Add(mod);

            Assert.Equal("1d6", diceStat.DisplayString());
            character.SetLevel(2);
            Assert.Equal("1d6", diceStat.DisplayString());
            character.SetLevel(3);
            Assert.Equal("2d6", diceStat.DisplayString());
            character.SetLevel(4);
            Assert.Equal("2d6", diceStat.DisplayString());
            character.SetLevel(12);
            Assert.Equal("6d6", diceStat.DisplayString());
            character.SetLevel(19);
            Assert.Equal("10d6", diceStat.DisplayString());
        }
Example #9
0
        public void SometimesWantToDoForEveryFourInStatAddTwoSomewhereElse()
        {
            var character = CharacterTestTemplates.AverageBob();
            var yaml      = @"---
name: power attack
modifier: base attack bonus
modifier-type: circumstance
every: 4
add: 2";
            var statMod   = new StatisticStatModifier(yaml.ParseYaml());

            character.Add(statMod);
            Assert.Equal(0, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(3);
            Assert.Equal(0, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(4);
            Assert.Equal(2, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(7);
            Assert.Equal(2, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(8);
            Assert.Equal(4, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(11);
            Assert.Equal(4, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(12);
            Assert.Equal(6, statMod.Modifier);
        }
Example #10
0
        public void SelectsTenSkillsForClassSkills()
        {
            //Add twelve skills
            var skills = new Skill[] {
                new Skill("Skill 1", AbilityScoreTypes.Strength, false),
                new Skill("Skill 2", AbilityScoreTypes.Strength, false),
                new Skill("Skill 3", AbilityScoreTypes.Strength, false),
                new Skill("Skill 4", AbilityScoreTypes.Strength, false),
                new Skill("Skill 5", AbilityScoreTypes.Strength, false),
                new Skill("Skill 6", AbilityScoreTypes.Strength, false),
                new Skill("Skill 7", AbilityScoreTypes.Strength, false),
                new Skill("Skill 9", AbilityScoreTypes.Strength, false),
                new Skill("Skill 10", AbilityScoreTypes.Strength, false),
                new Skill("Skill 11", AbilityScoreTypes.Strength, false),
                new Skill("Skill 12", AbilityScoreTypes.Strength, false)
            };
            var character = CharacterTestTemplates.AverageBob();

            character.SkillRanks.FillSkills(skills);

            var subject = new ExpertCustomSteps();

            subject.Execute(character.Components);
            Assert.Equal(character.SkillRanks.GetClassSkills().Count(), 10);
        }
Example #11
0
        public void ProvidesDamageBasedOnEnergyType()
        {
            var sorcerer   = CharacterTestTemplates.Sorcerer();
            var dragonType = new DragonType();

            dragonType.EnergyType  = "cold";
            dragonType.BreathRange = 30;
            dragonType.BreathShape = "cone";
            var draconic = new Mock <IDraconicBloodline>();

            draconic.Setup(x => x.DragonType).Returns(dragonType);
            sorcerer.Add(draconic.Object);

            sorcerer.SetLevel(10);

            var breath = new BreathWeapon();

            sorcerer.Add(breath);

            Assert.Equal("10d6", breath.Damage.ToString());
            Assert.Equal(15, breath.SaveDC);
            sorcerer.AbilityScores.SetScore(AbilityScoreTypes.Charisma, 16);
            Assert.Equal(18, breath.SaveDC);

            Assert.Equal(1, breath.UsesPerDay);
            Assert.Equal("Breath Weapon (30' cone, 10d6 cold, DC 18, 1/day)", breath.DisplayString());
        }
Example #12
0
        public void BasicYamlConfiguration()
        {
            var yaml = @"
name: Bite
attack-type: Melee
damage: 
  name: Bite Damage
  dice: 1d4
attack-bonus:
  name: Bite Attack Bonus
  base-value: 0";

            var bite = new Bite(yaml.ParseYaml());

            Assert.Equal("Bite", bite.Name);
            Assert.Equal(AttackTypes.Melee, bite.AttackType);
            Assert.Equal("1d4", bite.Damage.ToString());
            Assert.Equal("Bite +0 (1d4)", bite.DisplayString());

            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(bite);
            Assert.NotNull(bob.FindStat("Bite Attack Bonus"));
            Assert.NotNull(bob.FindStat("Bite Damage"));
        }
Example #13
0
        public void AddsToTheLanguageList()
        {
            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(new TongueOfSunAndMoon());
            Assert.Contains("Tongue of Sun and Moon", bob.Languages.Select(x => x.Name));
        }
Example #14
0
        public void AddingToCharacterGrantsNewClassSkill()
        {
            var character = CharacterTestTemplates.AverageBob().WithSkills(new string[] { "Knowledge Dungeoneering" });

            character.Add(aberrant);
            Assert.True(character.SkillRanks.GetSkill("Knowledge Dungeoneering").ClassSkill);
        }
Example #15
0
        public void ProvidesImmunityToPoison()
        {
            var monk = CharacterTestTemplates.MarkyMonk();

            monk.Add(new DiamondBody());
            AssertCharacter.IsImmuneTo("poison", monk);
        }
Example #16
0
        public void GetReadySpellsReturnsEmptyListIfNoSpellsAreReady()
        {
            var cleric  = CharacterTestTemplates.Cleric().WithDivineCasting();
            var casting = cleric.Get <DivineCasting>();

            AssertExtensions.EquivalentLists(new string[] { }, casting.GetReadySpells(6));
        }
Example #17
0
        public void ConvertsDamageBasedOnCharacterSize()
        {
            var bob = CharacterTestTemplates.AverageBob();

            bob.Size.SetSize(CharacterSize.Small, 4, 120);

            var yaml = @"
name: Bite
attack-type: Melee
damage: 
  name: Bite Damage
  dice: 1d4
attack-bonus:
  name: Bite Attack Bonus
  base-value: 0";
            var bite = new Bite(yaml.ParseYaml());

            bob.Add(bite);

            var modYaml = @"
name: Bite Damage";
            var sizeMod = new ConvertDamageDiceOnSizeModifier(modYaml.ParseYaml());

            bob.Add(sizeMod);

            Assert.Equal("1d3", bite.Damage.ToString());
        }
Example #18
0
        public void AuraOfCourageEnablesImmunityToFear()
        {
            var character = CharacterTestTemplates.AverageBob();

            character.Add(new AuraOfCourage());
            AssertCharacter.IsImmuneTo("Fear", character);
        }
Example #19
0
        public void AdjustDamageToMeetCharacterSize()
        {
            var monk = CharacterTestTemplates.MarkyMonk();

            monk.Size.SetSize(CharacterSize.Small, 0, 0);
            monk.Add(unarmedStrike);
            Assert.Equal("1d4", unarmedStrike.Attack.Damage.ToString());
        }
Example #20
0
        public void AddsUnarmedMeleeAttackToOffenseStats()
        {
            var monk = CharacterTestTemplates.MarkyMonk();

            monk.Add(unarmedStrike);
            Assert.Contains(unarmedStrike.Attack, monk.Offense.Attacks());
            Assert.Equal("1d6", unarmedStrike.Attack.Damage.ToString());
        }
Example #21
0
        public void NeutralCharactersPickSomething()
        {
            var c = CharacterTestTemplates.Cleric();

            c.Alignment = CharacterAlignment.Neutral;
            c.Add(channel);
            Assert.False(string.IsNullOrEmpty(channel.EnergyType));
        }
Example #22
0
        public void PicksNegativeEnergyIfAlignmentIsEvil()
        {
            var c = CharacterTestTemplates.Cleric();

            c.Alignment = CharacterAlignment.LawfulEvil;
            c.Add(channel);
            Assert.Equal(ChannelEnergy.NEGATIVE_ENERGY, channel.EnergyType);
        }
Example #23
0
        public void PicksPositiveEnergyIfAlignmentIsGood()
        {
            var c = CharacterTestTemplates.Cleric();

            c.Alignment = CharacterAlignment.ChaoticGood;
            c.Add(channel);
            Assert.Equal(ChannelEnergy.POSITIVE_ENERGY, channel.EnergyType);
        }
Example #24
0
        public void CanAddPerformCharacterSkills()
        {
            var bard = CharacterTestTemplates.BardyBard().WithSkills(new string[] { "Perform (Oratory)" });
            var versatilePerformance = new VersatilePerformance();

            versatilePerformance.AddSkill(bard.SkillRanks.GetSkill("Perform (Oratory)"));
            AssertExtensions.Contains(bard.SkillRanks.GetSkill("Perform (Oratory)"), versatilePerformance.Skills);
        }
Example #25
0
        public void LevelsCanModifyStats()
        {
            var level     = new Level(fighter);
            var character = CharacterTestTemplates.AverageBob();

            character.Add(level);
            AssertCharacter.HasWillSave(1, "fear", character);
        }
Example #26
0
        public void CreatesAStatForTrackingUsesPerDay()
        {
            var character = CharacterTestTemplates.AverageBob();
            var lay       = new LayOnHands();

            character.Add(lay);
            Assert.NotNull(character.FindStat(lay.UsesPerDayStatName()));
        }
Example #27
0
        public void AbilityIsNotQualifiedIfNotExceedingScore()
        {
            var pre = new AbilityPrerequisite(AbilityScoreTypes.Intelligence, 13);
            var c   = CharacterTestTemplates.AverageBob();

            c.AbilityScores.SetScore(AbilityScoreTypes.Intelligence, 11);
            Assert.False(pre.IsQualified(c.Components));
        }
Example #28
0
        public void AddsDiceStatisticForHealingDice()
        {
            var character = CharacterTestTemplates.AverageBob();
            var lay       = new LayOnHands();

            character.Add(lay);
            Assert.NotNull(character.FindStat("Lay On Hands Dice"));
        }
Example #29
0
        public void MeleeAttackUsesTheBaseAttackBonusForTheCharacterAsABase()
        {
            var bob        = CharacterTestTemplates.AverageBob();
            var calculator = bob.Get <MeleeAttackBonus>();

            bob.Offense.BaseAttackBonus.SetValue(10);
            Assert.Equal(10, calculator.TotalValue);
        }
Example #30
0
        public void IfNoPreferredSkillsAvailableJustChooseOne()
        {
            var generic    = CharacterTestTemplates.WithSkills(new string[] { "Climb" });
            var skillFocus = SkillFocus.CreateForTesting();

            generic.Add(skillFocus);
            Assert.Equal(3, generic.SkillRanks.GetScore("Climb"));
        }