diff --git a/dungeonsheets/features/races.py b/dungeonsheets/features/races.py index abb1ca2..22ed3ea 100644 --- a/dungeonsheets/features/races.py +++ b/dungeonsheets/features/races.py @@ -711,3 +711,115 @@ class CallToTheWave(Feature): """ name = "Call to the Wave" source = "Race (Water Genasi)" + +#monsterous races +#bugbear +class LongLimbed(Feature): + """ When you make a melee attack on your turn, your reach for it is 5 feet greater than normal. + + """ + name = "Long-Limbed" + source = "Race (BugBear)" + +class SupriseAttack(Feature): + """ If you surprise a creature and hit it with an attack on your first turn + in combat, the attack deals an extra 2d6 damage to it. You can use this trait + only once per combat. + + """ + name = "Suprise Attack" + source = "Race (BugBear)" + +#goblin +class FuryOfTheSmall(Feature): + """When you damage a creature with an attack or a spell and the creature's size + is larger than yours, you can cause the attack or spell to deal extra damage to + the creature. The extra damage equals your level. Once you use this trait, you + can't use it again until you finish a short or long rest. + + """ + name = "Fury of the Small" + source = "Race (Goblin)" + +class NimbleEscape(Feature): + """ You can take the Disengage or Hide action as a bonus action on each of your turns. + + """ + name = "Nimble Escape" + source = "Race (Goblin)" + +#HobGoblin +class SavingFace(Feature): + """Hobgoblins are careful not to show weakness in front of their allies, for fear + of losing status. If you miss with an attack roll or fail an ability check or a + saving throw, you can gain a bonus to the roll equal to the number of allies you + can see within 30 feet of you (maximum bonus of +5). Once you use this trait, you + can't use it again until you finish a short or long rest. + + """ + name = "Saving Face" + source = "Race (HobGoblin)" + +class MartialTraining(Feature): #you have to add the weapons of choice to your sheet + """You are proficient with two martial weapons of your choice and with light armor. + + """ + name = "Martial Training" + source = "Race (HobGoblin)" + +#kobold +class GrovelCowerAndBeg(Feature): + """ As an action on your turn, you can cower pathetically to + distract nearby foes. Until the end of your next turn, your + allies gain advantage on attack rolls against enemies + within 10 feet of you that can see you. Once you use this + trait, you can't use it again until you finish a short + or long rest + + """ + name = "Grovel Cower and Beg" + source = "Race (Kobold)" + +class PackTactics(Feature): + """You have advantage on an attack roll against a creature + if at least one of your allies is within 5 feet of the + creature and the ally isn't incapacitated. + """ + name = "Pack Tactics" + source = "Race (Kobold)" + +class Aggressive(Feature): + """ As a bonus action, you can move up to your speed + toward an enemy of your choice that you can see or hear. + You must end this move closer to the enemy than you started. + + """ + name = "Aggressive" + source = "Race (Orc)" + +#yuan-ti pureblood +class InnateSpellcasting(Feature): + """You know the poison spray cantrip. You can cast animal + friendship an unlimited number of times with this trait, + but you can target only snakes with it. Starting at 3rd level, + you can also cast suggestion with this trait. Once you cast it, + you can't do so again until you finish a long rest. Charisma is + your spellcasting ability for these spells. + + """ + name = "Innate Spellcasting" + source = "Race (Yuan-Ti Pureblood)" + +class MagicResistance(Feature): + """ You have advantage on saving throws against spells and other magical effects. + + """ + name = "Magic Resistance" + source = "Race (Yuan_Ti Pureblood)" + +class PoisonImmunity(Feature): + """You are immune to poison damage and the poi~oned condition. + + """ + name = "Poison Immunity" + source = "Race (Yuan_Ti Pureblood)" \ No newline at end of file diff --git a/dungeonsheets/race.py b/dungeonsheets/race.py index 390d90f..a5fcfef 100644 --- a/dungeonsheets/race.py +++ b/dungeonsheets/race.py @@ -414,6 +414,70 @@ class WaterGenasi(_Genasi): features = (feats.AcidResistance, feats.Amphibious, feats.CallToTheWave) +class BugBear(Race): + name = "BugBear" + strength_bonus = 2 + dexterity_bonus = 1 + size = 'medium' + speed = 30 + features = (feats.Darkvision, feats.LongLimbed, + feats.PowerfulBuild, feats.SupriseAttack) + skill_proficiencies = ("stealth", ) + languages = ("Common", "Goblin") + +class Goblin(Race): + name = "Goblin" + dexterity_bonus = 2 + constitution_bonus = 1 + size = 'small' + speed = 30 + features = (feats.Darkvision, feats.FuryOfTheSmall, + feats.NimbleEscape) + languages = ("Common", "Goblin") + +class HobGoblin(Race): + name = "HobGoblin" + constitution_bonus = 2 + intelligence_bonus = 1 + size = 'medium' + speed = 30 + features = (feats.Darkvision, feats.SavingFace) + proficiencies_text = ('light armor',) + languages = ("Common", "Goblin") + +class Kobold(Race): + name = "Kobold" + dexterity_bonus = 2 + strength_bonus = -2 + size = 'small' + speed = 30 + features = (feats.Darkvision, feats.PackTactics, + feats.GrovelCowerAndBeg, feats.SunlightSensitivity) + languages = ("Common", "Draconic") + +class Orc(Race): + name = "Orc" + strength_bonus = 2 + constitution_bonus = 1 + intelligence_bonus = -2 + size = 'medium' + speed = 30 + skill_proficiencies = ('intimidation',) + features = (feats.Darkvision, feats.Aggressive, + feats.PowerfulBuild) + languages = ("Common", "Orc") + +class PureBlood(Race): + name = "Yuan-Ti Pureblood" + charisma_bonus = 2 + intelligence_bonus = 1 + size = 'medium' + speed = 30 + features = (feats.Darkvision, feats.InnateSpellcasting, + feats.MagicResistance, feats.PoisonImmunity) + spells_known = (spells.PoisonSpray,) + languages = ("Common", "Abyssal", "Draconic") + PHB_races = [HillDwarf, MountainDwarf, HighElf, WoodElf, DarkElf, LightfootHalfling, StoutHalfling, Human, Dragonborn, @@ -425,7 +489,9 @@ VOLO_races = [ProtectorAasimar, ScourgeAasimar, FallenAasimar, EE_races = [Aarakocra, DeepGnome, AirGenasi, FireGenasi, EarthGenasi, WaterGenasi] -available_races = PHB_races + VOLO_races + EE_races +MONSTER_races = [BugBear, Goblin, HobGoblin, Kobold, Orc, PureBlood] + +available_races = PHB_races + VOLO_races + EE_races + MONSTER_races __all__ = tuple([r.name for r in available_races]) + ( - 'available_races', 'PHB_races', 'VOLO_races', 'EE_races') + 'available_races', 'PHB_races', 'VOLO_races', 'EE_races', 'MONSTER_races')