Пример #1
0
        public string RollDamage(int x)
        {
            var sReturn = String.Empty;

            if (Attacks[x].Damage != null)
            {
                var dice        = Attacks[x].Damage.Dice;
                var mods        = Attacks[x].Damage.AbilityModifiers;
                int rolledTotal = 0;

                foreach (int d in dice)
                {
                    var dieResult = RNG.D(d);
                    rolledTotal += dieResult;
                    sReturn     += $"D{d}({dieResult})";
                }

                if (mods?.Count > 0)
                {
                    sReturn += "+";

                    foreach (Constants.Abilities a in mods)
                    {
                        var bonus = AbilityBonus(a);
                        rolledTotal += bonus;
                        sReturn     += $"{a.ToString().Substring(0, 3)}({bonus})";
                    }
                }

                sReturn += $"={rolledTotal}";
            }
            return(sReturn);
        }
Пример #2
0
 public void Test_Die_Roll_X1000(int dieType)
 {
     for (var i = 0; i <= 1000; i++)
     {
         var result = RNG.D(dieType);
         Assert.InRange(result, 1, dieType);
     }
 }
Пример #3
0
        public Race_Dragonborn(ICharacter character, Constants.LoadTypes lt) : base(lt)
        {
            SetComponent(character);

            AddSpecialFeature(Constants.SpecialFeatures.DragonbornDamageResistance);

            Constants.DragonTypes randomDragonType = (Constants.DragonTypes)(RNG.D(Enum.GetNames(typeof(Constants.DragonTypes)).Length - 1));
            DragonTypeFeatures(randomDragonType);
        }
Пример #4
0
        public void AddRandomProficiency(List <Constants.Skills> options, int num)
        {
            var remainingOptions = options;

            for (var i = 0; i < num; i++)
            {
                var roll = RNG.D(remainingOptions.Count);
                AddProficiency(remainingOptions[roll - 1]);
                remainingOptions.RemoveAt(roll - 1);
            }
        }
Пример #5
0
        private ICharacter RandomHalfling(ICharacter character, LoadTypes loadType = LoadTypes.InitialBuild)
        {
            var roll = RNG.D(100);

            switch (roll)
            {
            case int n when(n <= 50): return(AddRace(character, Races.Halfling, Subraces.Halfling_Lightfoot, loadType));

            case int n when(n <= 100): return(AddRace(character, Races.Halfling, Subraces.Halfling_Stout, loadType));

            default:
                throw new System.Exception();
            }
        }
Пример #6
0
        private ICharacter RandomGnome(ICharacter character, LoadTypes loadType = LoadTypes.InitialBuild)
        {
            var roll = RNG.D(100);

            switch (roll)
            {
            case int n when(n <= 50): return(AddRace(character, Races.Gnome, Subraces.Gnome_Forest, loadType));

            case int n when(n <= 100): return(AddRace(character, Races.Gnome, Subraces.Gnome_Rock, loadType));

            default:
                throw new System.Exception();
            }
        }
Пример #7
0
        private ICharacter RandomDwarf(ICharacter character, LoadTypes loadType = LoadTypes.InitialBuild)
        {
            var roll = RNG.D(100);

            switch (roll)
            {
            case int n when(n <= 50): return(AddRace(character, Races.Dwarf, Subraces.Dwarf_Hill, loadType));

            case int n when(n <= 100): return(AddRace(character, Races.Dwarf, Subraces.Dwarf_Mountain, loadType));

            default:
                throw new System.Exception();
            }
        }
Пример #8
0
        private ICharacter RandomElf(ICharacter character, LoadTypes loadType = LoadTypes.InitialBuild)
        {
            var roll = RNG.D(100);

            switch (roll)
            {
            case int n when(n <= 10): return(AddRace(character, Races.Elf, Subraces.Elf_Drow, loadType));

            case int n when(n <= 55): return(AddRace(character, Races.Elf, Subraces.Elf_High, loadType));

            case int n when(n <= 100): return(AddRace(character, Races.Elf, Subraces.Elf_Wood, loadType));

            default:
                throw new System.Exception();
            }
        }
Пример #9
0
        private ICharacter RandomAasimar(ICharacter character, LoadTypes loadType = LoadTypes.InitialBuild)
        {
            var roll = RNG.D(100);

            switch (roll)
            {
            case int n when(n <= 33): return(AddRace(character, Races.Aasimar, Subraces.Aasimar_Fallen, loadType));

            case int n when(n <= 67): return(AddRace(character, Races.Aasimar, Subraces.Aasimar_Protector, loadType));

            case int n when(n <= 100): return(AddRace(character, Races.Aasimar, Subraces.Aasimar_Scourge, loadType));

            default:
                throw new System.Exception();
            }
        }
Пример #10
0
        public ICharacter RandomDarkerDungeonBackground(ICharacter character, LoadTypes loadType)
        {
            switch (RNG.D(100))
            {
            case int n when(n < 7):
                return(AddBackground(character, Backgrounds.Acolyte, loadType));

            case int n when(n < 14):
                return(AddBackground(character, Backgrounds.Charlatan, loadType));

            case int n when(n < 21):
                return(AddBackground(character, Backgrounds.Criminal, loadType));

            case int n when(n < 28):
                return(AddBackground(character, Backgrounds.Entertainer, loadType));

            case int n when(n < 35):
                return(AddBackground(character, Backgrounds.FolkHero, loadType));

            case int n when(n < 42):
                return(AddBackground(character, Backgrounds.GuildArtisan, loadType));

            case int n when(n < 49):
                return(AddBackground(character, Backgrounds.Hermit, loadType));

            case int n when(n < 56):
                return(AddBackground(character, Backgrounds.Noble, loadType));

            case int n when(n < 63):
                return(AddBackground(character, Backgrounds.Outlander, loadType));

            case int n when(n < 70):
                return(AddBackground(character, Backgrounds.Sage, loadType));

            case int n when(n < 77):
                return(AddBackground(character, Backgrounds.Sailor, loadType));

            case int n when(n < 84):
                return(AddBackground(character, Backgrounds.Soldier, loadType));

            case int n when(n < 100):
                return(AddBackground(character, Backgrounds.Urchin, loadType));

            default:
                throw new System.InvalidOperationException();
            }
        }
Пример #11
0
        public ICharacter RandomDarkerDungeonClass(ICharacter character, int level, LoadTypes loadType)
        {
            switch (RNG.D(100))
            {
            case int n when(n < 8):
                return(AddClass(character, level, Classes.Barbarian, loadType));

            case int n when(n < 16):
                return(AddClass(character, level, Classes.Bard, loadType));

            case int n when(n < 24):
                return(AddClass(character, level, Classes.Cleric, loadType));

            case int n when(n < 32):
                return(AddClass(character, level, Classes.Druid, loadType));

            case int n when(n < 40):
                return(AddClass(character, level, Classes.Fighter, loadType));

            case int n when(n < 48):
                return(AddClass(character, level, Classes.Monk, loadType));

            case int n when(n < 56):
                return(AddClass(character, level, Classes.Paladin, loadType));

            case int n when(n < 64):
                return(AddClass(character, level, Classes.Ranger, loadType));

            case int n when(n < 72):
                return(AddClass(character, level, Classes.Rogue, loadType));

            case int n when(n < 80):
                return(AddClass(character, level, Classes.Sorcerer, loadType));

            case int n when(n < 88):
                return(AddClass(character, level, Classes.Warlock, loadType));

            case int n when(n < 100):
                return(AddClass(character, level, Classes.Wizard, loadType));

            default:
                throw new System.InvalidOperationException();
            }
        }
Пример #12
0
        private ICharacter RandomDarkerDungeonRace(ICharacter character, LoadTypes loadType = LoadTypes.InitialBuild)
        {
            var roll = RNG.D(100);

            switch (roll)
            {
            case int n when(n <= 1): return(RandomAasimar(character, loadType));

            case int n when(n <= 4): return(AddRace(character, Races.Dragonborn, Subraces.None, loadType));

            case int n when(n <= 19): return(RandomDwarf(character, loadType));

            case int n when(n <= 29): return(RandomElf(character, loadType));

            case int n when(n <= 31): return(AddRace(character, Races.Firbolg, Subraces.None, loadType));

            case int n when(n <= 37): return(RandomGnome(character, loadType));

            case int n when(n <= 39): return(AddRace(character, Races.Goliath, Subraces.None, loadType));

            case int n when(n <= 40): return(AddRace(character, Races.Halfelf, Subraces.None, loadType));

            case int n when(n <= 41): return(AddRace(character, Races.Halforc, Subraces.None, loadType));

            case int n when(n <= 48): return(RandomHalfling(character, loadType));

            case int n when(n <= 90): return(AddRace(character, Races.Human, Subraces.None, loadType));

            case int n when(n <= 91): return(AddRace(character, Races.Kenku, Subraces.None, loadType));

            case int n when(n <= 92): return(AddRace(character, Races.Lizardfolk, Subraces.None, loadType));

            case int n when(n <= 94): return(AddRace(character, Races.Tabaxi, Subraces.None, loadType));

            case int n when(n <= 98): return(AddRace(character, Races.Tiefling, Subraces.None, loadType));

            case int n when(n < 100): return(AddRace(character, Races.Triton, Subraces.None, loadType));

            default:
                throw new System.Exception();
            }
        }
Пример #13
0
        /// <summary>
        /// this uses the character creation rules specified in the Darker Dungeons book
        /// </summary>
        /// <returns></returns>
        public int[] RandomStatArray()
        {
            var arrStats = new int[6];

            //roll 3d6 in order
            for (var i = 0; i < 6; i++)
            {
                var roll = RNG.D(6, 3);
                arrStats[i] = roll;
            }

            //reroll lowest, keep higher result
            var lowest = arrStats.Min();
            var reroll = RNG.D(6, 3);

            if (reroll > lowest)
            {
                arrStats[Array.IndexOf(arrStats, lowest)] = reroll;
            }

            return(arrStats);
        }
Пример #14
0
        public void AddRandomSkill(List <Constants.Skills> options)
        {
            var roll = RNG.D(options.Count);

            AddProficiency(options[roll - 1]);
        }
Пример #15
0
        public void AddRandomLanguage(List <Constants.Languages> options)
        {
            var roll = RNG.D(options.Count);

            AddLanguage(options[roll - 1]);
        }