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); }
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); } }
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); }
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); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
/// <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); }
public void AddRandomSkill(List <Constants.Skills> options) { var roll = RNG.D(options.Count); AddProficiency(options[roll - 1]); }
public void AddRandomLanguage(List <Constants.Languages> options) { var roll = RNG.D(options.Count); AddLanguage(options[roll - 1]); }