Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
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
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]
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),
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
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
"""
'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),
'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),
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
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)
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