Example #1
0
        public Wizard()
        {
            SetName("Wizard");
            HitDie = "1d6";

            ///////////////////z
            // PROFICIENCIES //
            ///////////////////

            SetProficiencyBonus(2);

            var Proficiencies = new Dictionary <string, List <string> >()
            {
                { "Armor", new List <string>()
                  {
                  } },
                { "Weapons", new List <string>()
                  {
                      "Daggers", "Darts", "Slings", "Quarterstaffs", "Light Crossbows"
                  } },
                { "Tools", new List <string>() },
                { "Saving Throws", new List <string>()
                  {
                      "Intelligence", "Wisdom"
                  } },
                { "Skills", new List <string>()
                  {
                  } }
            };

            // Wizards can select two skills from the following list
            var wizardSkillProfs = new List <string>()
            {
                "Arcana",
                "History",
                "Insight",
                "Investigation",
                "Medicine",
                "Religion"
            };

            Proficiencies["Skills"].Add(wizardSkillProfs[0]);
            Proficiencies["Skills"].Add(wizardSkillProfs[1]);

            SetProficiencies(Proficiencies);

            ///////////////
            // EQUIPMENT //
            ///////////////

            // A quarterstaff or a dagger
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                PrimaryWeapon = GetWeapons().Where(w => w.Name == "Quarterstaff").ToList()[0];
                break;

            case 1:
                PrimaryWeapon = GetWeapons().Where(w => w.Name == "Dagger").ToList()[0];
                break;
            }

            // A component pouch or an arcane focus
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                OtherEquipment.Add("Component Pouch");
                break;

            case 1:
                OtherEquipment.Add("Arcane Focus");
                break;
            }

            // A scholar’s pack or an explorer’s pack
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                EquipmentPack = GetPacks().Where(p => p.Name == "Explorer's Pack").ToList()[0];
                break;

            case 1:
                EquipmentPack = GetPacks().Where(p => p.Name == "Scholar's Pack").ToList()[0];
                break;
            }

            // A spellbook
            OtherEquipment.Add("Spellbook");

            //////////////
            //  SPELLS  //
            //////////////

            // At level 1 Wizards get
            // 3 x Cantrips
            // 2 x First level spells

            SpellSlots = 2;

            List <string> wizardCantrips = new List <string>()
            {
                "Acid Splash",
                "Chill Touch",
                "Dancing Lights",
                "Fire Bolt",
                "Light",
                "Mage Hand",
                "Mending",
                "Message",
                "Minor Illusion",
                "Prestidigitation",
                "Ray of Frost",
                "Shocking Grasp",
                "True Strike"
            };

            Cantrips = Tools.ReturnXSpellsFromList(wizardCantrips, 3);

            List <string> wizardLevel1Spells = new List <string>()
            {
                "Alarm",
                "Burning Hands",
                "Charm Person",
                "Color Spray",
                "Comprehend Languages",
                "Detect Magic",
                "Disguise Self",
                "Expeditious Retreat",
                "False Life",
                "Feather Fall",
                "Floating Disk",
                "Fog Cloud",
                "Grease",
                "Hideous Laughter",
                "Identify",
                "Illusory Script",
                "Jump",
                "Longstrider",
                "Mage Armor",
                "Magic Missile",
                "Protection from Evil and Good",
                "Shield",
                "Silent Image",
                "Sleep",
                "Thunderwave",
                "Unseen Servant"
            };

            Level1Spells = Tools.ReturnXSpellsFromList(wizardLevel1Spells, SpellSlots);

            //////////////
            // FEATURES //
            //////////////

            // Only details for the Fiend were released as Open Game Content by Wizards of the Coast
            Features.Add(new Feature("Spellcasting", "", 1));
            Features.Add(new Feature("Arcane Recovery", "", 1));
        }
Example #2
0
        public Warlock()
        {
            SetName("Warlock");
            HitDie = "1d8";

            ///////////////////
            // PROFICIENCIES //
            ///////////////////

            SetProficiencyBonus(2);

            var Proficiencies = new Dictionary <string, List <string> >()
            {
                { "Armor", new List <string>()
                  {
                      "Light Armor"
                  } },
                { "Weapons", new List <string>()
                  {
                      "Simple Weapons"
                  } },
                { "Tools", new List <string>() },
                { "Saving Throws", new List <string>()
                  {
                      "Wisdom", "Charisma"
                  } },
                { "Skills", new List <string>()
                  {
                  } }
            };

            // Warlocks can select two skills from the following list
            var warlockSkillProfs = new List <string>()
            {
                "Arcana",
                "Deception",
                "History",
                "Intimidation",
                "Investigation",
                "Nature",
                "Religion"
            };

            Proficiencies["Skills"].Add(warlockSkillProfs[0]);
            Proficiencies["Skills"].Add(warlockSkillProfs[1]);

            SetProficiencies(Proficiencies);

            ///////////////
            // EQUIPMENT //
            ///////////////

            // Warlocks get a light crossbow and 20 bolts or any simple weapon
            var simpleWeapons = GetWeapons().Where(w => w.WeaponType == "Simple Melee").ToList();

            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                PrimaryWeapon = GetWeapons().Where(w => w.Name == "Light Crossbow").ToList()[0];
                Ammunition.Add(new Ammunition("light crossbow bolts", 20, "A quiver of light crossbow bolts"));
                break;

            case 1:
                Tools.ShuffleList(simpleWeapons);
                PrimaryWeapon = simpleWeapons[0];
                break;
            }

            // A component pouch or  an arcane focus
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                OtherEquipment.Add("Component Pouch");
                break;

            case 1:
                OtherEquipment.Add("Arcane Focus");
                break;
            }

            // A scholar’s pack or a dungeoneer’s pack
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                EquipmentPack = GetPacks().Where(p => p.Name == "Dungeoneer's Pack").ToList()[0];
                break;

            case 1:
                EquipmentPack = GetPacks().Where(p => p.Name == "Scholar's Pack").ToList()[0];
                break;
            }


            // Leather armor, any simple weapon, and two daggers
            Armor = GetArmor().Where(a => a.Name == "Leather Armor").ToList()[0];

            Tools.ShuffleList(simpleWeapons);
            PrimaryWeapon = simpleWeapons[0];

            AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Dagger").ToList()[0]);
            AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Dagger").ToList()[0]);

            //////////////
            //  SPELLS  //
            //////////////

            // At level 1 warlocks get
            // 2 x Cantrips
            // 2 x First level spells

            SpellSlots = 1;

            List <string> warlockCantrips = new List <string>()
            {
                "Chill Touch",
                "Mage Hand",
                "Minor Illusion",
                "Prestidigitation",
                "True Strike"
            };

            Cantrips = Tools.ReturnXSpellsFromList(warlockCantrips, 2);

            List <string> warlockLevel1Spells = new List <string>()
            {
                "Charm Person",
                "Comprehend Languages",
                "Expeditious Retreat",
                "Illusory Script",
                "Protection from Evil and Good",
                "Unseen Servant"
            };

            Level1Spells = Tools.ReturnXSpellsFromList(warlockLevel1Spells, SpellSlots);

            //////////////
            // FEATURES //
            //////////////

            // Only details for the Fiend were released as Open Game Content by Wizards of the Coast
            Features.Add(new Feature("Otherworldly Patron", "", 1));
            WarlockPatron = "Fiend";
            Features.Add(new Feature("Pact Magic", "", 1));
        }
Example #3
0
        public Rogue()
        {
            SetName("Rogue");
            HitDie = "1d8";

            ///////////////////
            // PROFICIENCIES //
            ///////////////////

            SetProficiencyBonus(2);
            var Proficiencies = new Dictionary <string, List <string> >()
            {
                { "Armor", new List <string>()
                  {
                      "Light Armor"
                  } },
                { "Weapons", new List <string>()
                  {
                      "Simple Weapons", "Hand Crossbow", "Longsword", "Rapiers", "Shortsword"
                  } },
                { "Tools", new List <string>()
                  {
                      "Thieves’ Tools"
                  } },
                { "Saving Throws", new List <string>()
                  {
                      "Dexterity", "Intelligence"
                  } },
                { "Skills", new List <string>()
                  {
                  } }
            };

            // Rogues can select four skills from the following list
            var rogueSkillProfs = new List <string>()
            {
                "Acrobatics",
                "Athletics",
                "Deception",
                "Insight",
                "Intimidation",
                "Investigation",
                "Perception",
                "Performance",
                "Persuasion",
                "Sleight of Hand",
                "Stealth"
            };

            // Shuffle list and add the top four
            rogueSkillProfs = Tools.ShuffleList(rogueSkillProfs);
            Proficiencies["Skills"].Add(rogueSkillProfs[0]);
            Proficiencies["Skills"].Add(rogueSkillProfs[1]);
            Proficiencies["Skills"].Add(rogueSkillProfs[2]);
            Proficiencies["Skills"].Add(rogueSkillProfs[3]);


            SetProficiencies(Proficiencies);

            ///////////////
            // EQUIPMENT //
            ///////////////

            // Rogues start with a rapier or a shortsword
            Weapon rapier    = GetWeapons().Where(w => w.Name == "Rapier").ToList()[0];
            Weapon longSword = GetWeapons().Where(w => w.Name == "Longsword").ToList()[0];

            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                PrimaryWeapon = rapier;
                break;

            case 1:
                PrimaryWeapon = longSword;
                break;
            }

            // a shortbow and quiver of 20 arrows or a shortsword
            Weapon shortSword = GetWeapons().Where(w => w.Name == "Shortsword").ToList()[0];
            Weapon shortBow   = GetWeapons().Where(w => w.Name == "Shortbow").ToList()[0];

            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                AdditionalWeapons.Add(shortSword);
                break;

            case 1:
                AdditionalWeapons.Add(shortBow);
                Ammunition.Add(new Ammunition("shortbow arrows", 20, "A quiver of shortbow arrows"));
                break;
            }

            // a burglar’s pack, a dungeoneer’s pack, or an explorer’s pack
            switch (Tools.GetRandomNumberInRange(0, 2))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                EquipmentPack = GetPacks().Where(p => p.Name == "Dungeoneer's Pack").ToList()[0];
                break;

            case 1:
                EquipmentPack = GetPacks().Where(p => p.Name == "Explorer's Pack").ToList()[0];
                break;

            case 2:
                EquipmentPack = GetPacks().Where(p => p.Name == "Burglar's Pack").ToList()[0];
                break;
            }

            // Leather armor, two daggers, and thieves’ tools
            Armor = GetArmor().Where(a => a.Name == "Leather Armor").ToList()[0];
            AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Dagger").ToList()[0]);
            AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Dagger").ToList()[0]);
            OtherEquipment.Add("Thieves’ Tools");

            //////////////
            // FEATURES //
            //////////////

            Features.Add(new Feature("Expertise", "", 1));
            Features.Add(new Feature("Sneak Attack", "", 1));
            Features.Add(new Feature("Thieves’ Cant", "", 1));
        }
Example #4
0
        public Sorcerer()
        {
            SetName("Sorcerer");
            HitDie = "1d8";

            ///////////////////
            // PROFICIENCIES //
            ///////////////////

            SetProficiencyBonus(2);
            var Proficiencies = new Dictionary <string, List <string> >()
            {
                { "Armor", new List <string>()
                  {
                  } },
                { "Weapons", new List <string>()
                  {
                      "Daggers", "Darts", "Slings", "Quarterstaffs", "Light Crossbows"
                  } },
                { "Tools", new List <string>()
                  {
                  } },
                { "Saving Throws", new List <string>()
                  {
                      "Constitution", "Charisma"
                  } },
                { "Skills", new List <string>()
                  {
                  } }
            };

            // Sorcerers can select two skills from the following list
            var sorcererSkillProfs = new List <string>()
            {
                "Arcana",
                "Deception",
                "Insight",
                "Intimidation",
                "Persuasion",
                "Religion"
            };

            // Shuffle list and add the top two
            sorcererSkillProfs = Tools.ShuffleList(sorcererSkillProfs);
            Proficiencies["Skills"].Add(sorcererSkillProfs[0]);
            Proficiencies["Skills"].Add(sorcererSkillProfs[1]);


            SetProficiencies(Proficiencies);

            ///////////////
            // EQUIPMENT //
            ///////////////

            // Sorcerers start with a light crossbow and 20 bolts or any simple weapon
            var simpleWeapons = GetWeapons().Where(w => w.WeaponType == "Simple Melee").ToList();

            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                PrimaryWeapon = GetWeapons().Where(w => w.Name == "Light Crossbow").ToList()[0];
                Ammunition.Add(new Ammunition("light crossbow bolts", 20, "A quiver of light crossbow bolts"));
                break;

            case 1:
                Tools.ShuffleList(simpleWeapons);
                PrimaryWeapon = simpleWeapons[0];
                break;
            }

            // A component pouch or an arcane focus
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                OtherEquipment.Add("Component Pouch");
                break;

            case 1:
                OtherEquipment.Add("Arcane Focus");
                break;
            }

            // A dungeoneer’s pack or an explorer’s pack
            switch (Tools.GetRandomNumberInRange(0, 1))
            {
            default: throw new System.Exception("number not in range");

            case 0:
                EquipmentPack = GetPacks().Where(p => p.Name == "Dungeoneer's Pack").ToList()[0];
                break;

            case 1:
                EquipmentPack = GetPacks().Where(p => p.Name == "Explorer's Pack").ToList()[0];
                break;
            }

            // Two daggers
            AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Dagger").ToList()[0]);
            AdditionalWeapons.Add(GetWeapons().Where(w => w.Name == "Dagger").ToList()[0]);

            //////////////
            //  SPELLS  //
            //////////////

            // At level 1 sorcerers get
            // 4 x Cantrips
            // 2 x 2 First level spells

            SpellSlots = 2;

            List <string> sorcererCantrips = new List <string>()
            {
                "Acid Splash",
                "Chill Touch",
                "Dancing Lights",
                "Fire Bolt",
                "Light",
                "Mage Hand",
                "Mending",
                "Message",
                "Minor Illusion",
                "Prestidigitation",
                "Ray of Frost",
                "Shocking Grasp",
                "True Strike"
            };

            Cantrips = Tools.ReturnXSpellsFromList(sorcererCantrips, 4);

            List <string> sorcererLevel1Spells = new List <string>()
            {
                "Burning Hands",
                "Charm Person",
                "Color Spray",
                "Comprehend Languages",
                "Detect Magic",
                "Disguise Self",
                "Expeditious Retreat",
                "False Life",
                "Feather Fall",
                "Fog Cloud",
                "Jump",
                "Mage Armor",
                "Magic Missile",
                "Shield",
                "Silent Image",
                "Sleep",
                "Thunderwave"
            };

            Level1Spells = Tools.ReturnXSpellsFromList(sorcererLevel1Spells, SpellSlots);

            //////////////
            // FEATURES //
            //////////////

            Features.Add(new Feature("Spellcasting", "", 1));

            Features.Add(new Feature("Sorcerous Origin", "", 1));
            // SRD only contains draconic bloodline
            SorcerousOrigin = "Draconic";



            Dictionary <string, string> DA = new Dictionary <string, string>()
            {
                { "Black", "Acid" },
                { "Blue", "Lightning" },
                { "Brass", "Fire" },
                { "Bronze", "Lightning" },
                { "Copper", "Acid" },
                { "Gold", "Fire" },
                { "Green", "Poison" },
                { "Red", "Fire" },
                { "Silver", "Cold" },
                { "White", "Cold" }
            };

            int index = Tools.GetRandomNumberInRange(0, DA.Count - 1);
            KeyValuePair <string, string> pair = DA.ElementAt(index);

            DraconicAncestry = pair;

            // Hitpoint +1 per level added in Character.cs SetLevel1HitPoints()
            // Unarmored AC = 13 + Dex mod added in Character.cs CalculateArmorClass()
        }