How to use the dungeonsheets.features function in dungeonsheets

To help you get started, we’ve selected a few dungeonsheets examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github canismarko / dungeon-sheets / dungeonsheets / classes / artificer.py View on Github external
class Artillerist(SubClass):
    """An Artillerist specializes in using magic to hurl energy, projectiles,
    and explosions on a battlefield. This destructive power was valued by all
    the armies of the Last War. Now that the war is over, some members of this
    specialization have sought to build a more peaceful world by using their
    powers to fight the resurgence of strife in Khorvaire. The gnome artificer
    Vi, an unlikely yet key member of House Cannith's warforged project, has
    been especially vocal about making things right: "It's about time we fixed
    things instead of blowing them all to hell."
    """

    name = "Artillerist"
    features_by_level = defaultdict(list)
    features_by_level[3] = [features.ArtilleristSpells,
                            features.ArtilleristToolProficiency,
                            features.EldritchCannon]
    features_by_level[5] = [features.ArcaneFirearm]
    features_by_level[9] = [features.ExplosiveCannon]
    features_by_level[15] = [features.FortifiedPosition]


class BattleSmith(SubClass):
    """Armies require protection, and someone has to put things back together
    if defenses fail. A combination of protector and medic, a Battle Smith is
    an expert at defending others and repairing both material and personnel.
    To aid in their work, Battle Smiths are usually accompanied by a steel
    defender, a protective companion of their own creation. Many soldiers tell
    stories of nearly dying before being saved by a Battle Smith and a steel
    defender.

    Battle Smiths played a key role in House Cannith's work on battle
    constructs and the original warforged, and after the Last War, these
github canismarko / dungeon-sheets / dungeonsheets / classes / barbarian.py View on Github external
weapon_proficiencies = (weapons.SimpleWeapon, weapons.MartialWeapon)
    _proficiencies_text = ('light armor', 'medium armor', 'shields',
                           'simple weapons', 'martial weapons')
    multiclass_weapon_proficiencies = weapon_proficiencies
    _multiclass_proficiencies_text = ('shields', 'simple weapons',
                                      'martial weapons')
    class_skill_choices = ('Animal Handling', 'Athletics',
                           'Intimidation', 'Nature', 'Perception', 'Survival')
    subclasses_available = (BerserkerPath, TotemWarriorPath, BattleragerPath,
                            AncestralGuardianPath, StormHeraldPath, ZealotPath)
    features_by_level = defaultdict(list)
    features_by_level[1] = [features.Rage, features.UnarmoredDefenseBarbarian]
    features_by_level[2] = [features.RecklessAttack, features.DangerSense]
    features_by_level[5] = [features.ExtraAttackBarbarian,
                            features.FastMovement]
    features_by_level[7] = [features.FeralInstinct]
    features_by_level[9] = [features.BrutalCritical]
    features_by_level[11] = [features.RelentlessRage]
    features_by_level[15] = [features.PersistentRage]
    features_by_level[18] = [features.IndomitableMight]
    features_by_level[20] = [features.PrimalChampion]
github canismarko / dungeon-sheets / dungeonsheets / classes / paladin.py View on Github external
subclass_select_level = 3
    saving_throw_proficiencies = ('wisdom', 'charisma')
    primary_abilities = ('strength', 'charisma')
    _proficiencies_text = ('All armor', 'shields', 'simple weapons',
                           'martial weapons')
    weapon_proficiencies = (weapons.SimpleWeapon, weapons.MartialWeapon)
    multiclass_weapon_proficiencies = weapon_proficiencies
    _multiclass_proficiencies_text = ('light armor', 'medium armor', 'shields',
                                      'simple weapons', 'martial weapons')
    class_skill_choices = ("Athletics", 'Insight', 'Intimidation',
                           'Medicine', 'Persuasion', 'Religion')
    features_by_level = defaultdict(list)
    features_by_level[1] = [features.DivineSense, features.LayOnHands]
    features_by_level[2] = [features.PaladinFightingStyle,
                            features.DivineSmite]
    features_by_level[3] = [features.DivineHealth,
                            features.ChannelDivinityPaladin]
    features_by_level[5] = [features.ExtraAttackPaladin]
    features_by_level[6] = [features.AuraOfProtection]
    features_by_level[10] = [features.AuraOfCourage]
    features_by_level[11] = [features.ImprovedDivineSmite]
    features_by_level[14] = [features.CleansingTouch]
    subclasses_available = (OathOfDevotion, OathOfAncients, OathOfVengance,
                            OathOfCrown, OathOfConquest, OathOfRedemption,
                            OathOfZor)
    spellcasting_ability = 'charisma'
    spell_slots_by_level = {
        # char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
        1:  (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
        2:  (0, 2, 0, 0, 0, 0, 0, 0, 0, 0),
        3:  (0, 3, 0, 0, 0, 0, 0, 0, 0, 0),
        4:  (0, 3, 0, 0, 0, 0, 0, 0, 0, 0),
github canismarko / dungeon-sheets / dungeonsheets / classes / bard.py View on Github external
class CollegeOfValor(SubClass):
    """Bards of the College of Valor are daring skalds whose tales keep alive the
    memory of the great heroes of the past, and thereby inspire a new
    generation of heroes. These bards gather in mead halls or around great
    bonfires to sing the deeds of the mighty, both past and present. They
    travel the land to witness great events firsthand and to ensure that the
    memory of those events doesn't pass from the world. With their songs, they
    inspire others to reach the same heights of accomplishment as the heroes of
    old

    """
    name = "College of Valor"
    weapon_proficiencies = (weapons.MartialWeapon,)
    _proficencies_text = ('martial weapons', 'medium armor', 'shields')
    features_by_level = defaultdict(list)
    features_by_level[3] = [features.CombatInspiration]
    features_by_level[6] = [features.BardExtraAttack]
    features_by_level[14] = [features.BardBattleMagic]


# XGTE
class CollegeOfGlamour(SubClass):
    """The College of Glamour is the home Of bards who mas- tered their craft in
    the vibrant realm of the Feywild or under the tutelage Of someone who
    dwelled there. Tutored by satyrs, eladrin, and other fey, these bards
    learn to use their magic to delight and captivate others.

    The bards of this college are regarded with a mixture of awe and
    fear. Their performances are the stuff of legend. These bards are so
    eloquent that a speech or song that one of them performs can cause captors
    tO release the bard unharmed and can lull a furious dragon into
    complacency. The same magic that allows them to quell beasts can also bend
github canismarko / dungeon-sheets / dungeonsheets / classes / monk.py View on Github external
from dungeonsheets import features, weapons
from dungeonsheets.classes.classes import CharClass, SubClass


# PHB
class OpenHandWay(SubClass):
    """Monks of the Way of the Open Hand are the ultimate masters of martial arts
    combat, whether armed or unarmed. They learn techniques to push and trip
    their opponents, manipulate ki to heal damage to their bodies, and practice
    advanced meditation that can protect them from harm.

    """
    name = "Way of the Open Hand"
    features_by_level = defaultdict(list)
    features_by_level[3] = [features.OpenHandTechnique]
    features_by_level[6] = [features.WholenessOfBody]
    features_by_level[11] = [features.Tranquility]
    features_by_level[17] = [features.QuiveringPalm]


class ShadowWay(SubClass):
    """Monks of the Way of Shadow follow a tradition that values stealth and
    subterfuge. These monks might be called ninjas or shadowdancers, and they
    serve as spies and assassins. Sometimes the members of a ninja monastery
    are family members, forming a clan sworn to secrecy about their arts and
    missions. Other monasteries are more like thieves' guilds, hiring out their
    services to nobles, rich merchants, or anyone else who can pay their
    fees. Regardless of their methods, the heads of these monasteries expect
    the unquestioning obedience of their students

    """
github canismarko / dungeon-sheets / dungeonsheets / classes / druid.py View on Github external
'clubs', 'daggers', 'darts', 'javelins', 'maces', 'quarterstaffs',
        'scimitars', 'sickles', 'slings', 'spears')
    weapon_proficiencies = (weapons.Club, weapons.Dagger, weapons.Dart,
                            weapons.Javelin, weapons.Mace,
                            weapons.Quarterstaff, weapons.Scimitar,
                            weapons.Sickle, weapons.Sling, weapons.Spear)
    multiclass_weapon_proficiencies = ()
    _multiclass_proficiencies_text = (
        'Light armor', 'medium armor',
        'shields (druids will not wear armor or use shields made of metal)')
    class_skill_choices = ('Arcana', 'Animal Handling', 'Insight',
                           'Medicine', 'Nature', 'Perception', 'Religion',
                           'Survival')
    features_by_level = defaultdict(list)
    features_by_level[2] = [features.WildShape]
    features_by_level[18] = [features.TimelessBody, features.BeastSpells]
    features_by_level[20] = [features.Archdruid]
    subclasses_available = (LandCircle, MoonCircle, DreamsCircle,
                            ShepherdCircle, SporesCircle)
    spellcasting_ability = 'wisdom'
    spell_slots_by_level = {
        1:  (2, 2, 0, 0, 0, 0, 0, 0, 0, 0),
        2:  (2, 3, 0, 0, 0, 0, 0, 0, 0, 0),
        3:  (2, 4, 2, 0, 0, 0, 0, 0, 0, 0),
        4:  (3, 4, 3, 0, 0, 0, 0, 0, 0, 0),
        5:  (3, 4, 3, 2, 0, 0, 0, 0, 0, 0),
        6:  (3, 4, 3, 3, 0, 0, 0, 0, 0, 0),
        7:  (3, 4, 3, 3, 1, 0, 0, 0, 0, 0),
        8:  (3, 4, 3, 3, 2, 0, 0, 0, 0, 0),
        9:  (3, 4, 3, 3, 3, 1, 0, 0, 0, 0),
        10: (4, 4, 3, 3, 3, 2, 0, 0, 0, 0),
        11: (4, 4, 3, 3, 3, 2, 1, 0, 0, 0),
github canismarko / dungeon-sheets / dungeonsheets / classes / bard.py View on Github external
'Nature', 'Perception', 'Performance', 'Persuasion',
                           'Religion', 'Sleight of Hand', 'Stealth',
                           'Survival')
    multiclass_weapon_proficiencies = ()
    _multiclass_proficiencies_text = ('Light Armor', '[choose one skill]',
                                      '[choose one musical instrument]')
    num_skill_choices = 3
    subclasses_available = (CollegeOfLore, CollegeOfValor, CollegeOfGlamour,
                            CollegeOfSwords, CollegeOfWhispers)
    features_by_level = defaultdict(list)
    features_by_level[1] = [features.BardicInspiration]
    features_by_level[2] = [features.SongOfRest, features.JackOfAllTrades]
    features_by_level[3] = [features.BardExpertise]
    features_by_level[5] = [features.FontOfInspiration]
    features_by_level[6] = [features.Countercharm]
    features_by_level[10] = [features.MagicalSecrets]
    features_by_level[20] = [features.SuperiorInspiration]
    spellcasting_ability = 'charisma'
    spell_slots_by_level = {
        # char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
        1:  (2, 2, 0, 0, 0, 0, 0, 0, 0, 0),
        2:  (2, 3, 0, 0, 0, 0, 0, 0, 0, 0),
        3:  (2, 4, 2, 0, 0, 0, 0, 0, 0, 0),
        4:  (3, 4, 3, 0, 0, 0, 0, 0, 0, 0),
        5:  (3, 4, 3, 2, 0, 0, 0, 0, 0, 0),
        6:  (3, 4, 3, 3, 0, 0, 0, 0, 0, 0),
        7:  (3, 4, 3, 3, 1, 0, 0, 0, 0, 0),
        8:  (3, 4, 3, 3, 2, 0, 0, 0, 0, 0),
        9:  (4, 4, 3, 3, 3, 1, 0, 0, 0, 0),
        10: (4, 4, 3, 3, 3, 2, 0, 0, 0, 0),
        11: (4, 4, 3, 3, 3, 2, 1, 0, 0, 0),
        12: (4, 4, 3, 3, 3, 2, 1, 0, 0, 0),
github canismarko / dungeon-sheets / dungeonsheets / race.py View on Github external
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', '[Chose two martial melee weapons]')
    languages = ("Common", "Goblin")

class Kobold(Race):
    name = "Kobold"
    dexterity_bonus = 2
github canismarko / dungeon-sheets / dungeonsheets / classes / fighter.py View on Github external
saving_throw_proficiencies = ('strength', 'constitution')
    primary_abilities = ('strength', 'dexterity',)
    _proficiencies_text = ('All armor', 'shields', 'simple weapons',
                           'martial weapons')
    weapon_proficiencies = (weapons.SimpleWeapon, weapons.MartialWeapon)
    multiclass_weapon_proficiencies = weapon_proficiencies
    _multiclass_proficiencies_text = ('light armor', 'medium armor',
                                      'shields', 'simple weapons',
                                      'martial weapons')
    class_skill_choices = ('Acrobatics', 'Animal Handling',
                           'Athletics', 'History', 'Insight', 'Intimidation',
                           'Perception', 'Survival')
    features_by_level = defaultdict(list)
    features_by_level[1] = [features.FighterFightingStyle, features.SecondWind]
    features_by_level[2] = [features.ActionSurge]
    features_by_level[5] = [features.ExtraAttackFighter]
    features_by_level[9] = [features.Indomitable]
    subclasses_available = (Champion, BattleMaster, EldritchKnight,
                            PurpleDragonKnight, ArcaneArcher, Cavalier,
                            Samurai, Gunslinger)
github canismarko / dungeon-sheets / dungeonsheets / classes / cleric.py View on Github external
well, champions who take a more active role in advancing the interests of
    a particular nature god. These clerics might hunt the evil monstrosities
    that despoil the woodlands, bless the harvest of the faithful, or wither
    the crops of those who anger their gods.

    """
    name = "Nature Domain"
    _domain_spells = {1: [spells.AnimalFriendship, spells.SpeakWithAnimals],
                      3: [spells.Barkskin, spells.SpikeGrowth],
                      5: [spells.PlantGrowth, spells.WindWall],
                      7: [spells.DominateBeast, spells.GraspingVine],
                      9: [spells.InsectPlague, spells.TreeStride]}
    _proficiencies_text = ('heavy armor',)
    features_by_level = defaultdict(list)
    features_by_level[1] = [features.AcolyteOfNature]
    features_by_level[2] = [features.CharmAnimalsAndPlants]
    features_by_level[6] = [features.DampenElements]
    features_by_level[8] = [features.DivineStrikeNature]
    features_by_level[17] = [features.MasterOfNature]


class TempestDomain(ClericDomain):
    """Gods whose portfolios include the Tempest domain - including Talos,
    Umberlee, Kord, Zeboim, the Devourer, Zeus, and Thor - govern storms, sea,
    and sky. They include gods of lightning and thunder, gods of earthquakes,
    some fire gods, and certain gods of violence, physical strength, and
    courage. In some pantheons, a god of this domain rules over other deities
    and is known for swift justice delivered by thunderbolts. In the pantheons
    of seafaring people, gods of this domain are ocean deities and the patrons
    of sailors. Tempest gods send their clerics to inspire fear in the common
    folk, either to keep those folk on the path of righteousness or to
    encourage them to offer sacrifices of propitiation to ward off divine