Files
dungeon-sheets/dungeonsheets/classes/bard.py
T
Mark Wolfman 30369ce1d4 Ran flake8 and black linters, and other cleanup-related fixes.
Project now passes flake8 and black linter (also including more rst
cleanup). Moved latex related things to dedicated ``latex.py`` module,
and removed the ``makesheets -dF`` call from travis.
2021-04-16 11:10:17 -05:00

236 lines
9.2 KiB
Python

from collections import defaultdict
from dungeonsheets import features, weapons
from dungeonsheets.classes.classes import CharClass, SubClass
# PHB
class CollegeOfLore(SubClass):
"""Bards of the College o f Lore know something about most things, collecting
bits of knowledge from sources as diverse as scholarly tomes and peasant
tales. Whether singing folk ballads in taverns or elaborate compositions in
royal courts, these bards use their gifts to hold audiences
spellbound. When the applause dies down, the audience members might find
themselves questioning everything they held to be true, from their faith in
the priesthood of the local temple to their loyalty to the king.
The loyalty of these bards lies in the pursuit of beauty and truth, not in
fealty to a monarch or following the tenets of a deity. A noble who keeps
such a bard as a herald or advisor knows that the bard would rather be
honest than politic.
The college's members gather in libraries and sometimes in actual colleges,
complete with classrooms and dormitories, to share their lore with one
another. They also meet at festivals or affairs of state, where they can
expose corruption, unravel lies, and poke fun at selfimportant figures of
authority.
"""
name = "College of Lore"
features_by_level = defaultdict(list)
features_by_level[3] = [features.LoreProficiencies, features.CuttingWords]
features_by_level[6] = [features.AdditionalMagicalSecrets]
features_by_level[14] = [features.PeerlessSkill]
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
minds. Villainous bards Of this college can leech Off a community for
weeks, misusing their magic to turn their hosts into thralls. Heroic bards
of this college instead use this power to gladden the downtrodden and
undermine oppressors.
"""
name = "College of Glamour"
features_by_level = defaultdict(list)
features_by_level[3] = [
features.MantleOfInspiration,
features.EnthrallingPerformance,
]
features_by_level[6] = [features.MantleOfMajesty]
features_by_level[14] = [features.UnbreakableMajesty]
class CollegeOfSwords(SubClass):
"""Bards of the College of Swords are called blades, and they entertain
through daring feats of weapon prowess. Blades perform stunts such as sword
swallowing, knife throwing and juggling, and mock combats. Though they use
their weapons to entertain, they are also highly trained and skilled
warriors in their own right.
Their talent with weapons inspires many blades to lead double lives. One
blade might use a circus troupe as cover for nefarious deeds such as
assassination, robbery, and blackmail. Other blades strike at the wicked,
bringingjustice to bear against the cruel and powerful. Most troupes are
happy to accept a blade's talent for the excitement it adds to a
performance, but few entertainers fully trust a blade in their ranks.
Blades who abandon their lives as entertainers have often run into trouble
that makes maintaining their secret activities impossible. A blade caught
stealing or engaging in vigilante justice is too great a liability for most
troupes. With their weapon skills and magic, these blades either take up
work as enforcers for thieves' guilds or strike out on their own as
adventurers.
"""
name = "College of Swords"
features_by_level = defaultdict(list)
weapon_prociciencies = (weapons.Scimitar,)
_proficiencies_text = ("medium armor", "scimitar")
features_by_level[3] = [
features.SwordsProficiency,
features.BardFightingStyle,
features.BladeFlourish,
]
features_by_level[6] = [features.BardExtraAttack]
features_by_level[14] = [features.MastersFlourish]
class CollegeOfWhispers(SubClass):
"""Most folk are happy to welcome a bard into their midst. Bards of the
College of Whispers use this to their advantage. They appear to be like
other bards, sharing news, singing songs, and telling tales to the
audiences they gather. In truth, the College of Whispers teaches its
students that they are wolves among sheep. These bards use their knowledge
and magic to uncover secrets and turn them against others through extortion
and threats.
Many other bards hate the College of Whispers, viewing it as a parasite
that uses a bard's reputation to acquire wealth and power. For this reason,
members of this college rarely reveal their true nature. They typically
claim to follow some other college, or they keep their actual calling
secret in order to infiltrate and exploit royal courts and other settings
of power
"""
name = "College of Whispers"
features_by_level = defaultdict(list)
features_by_level[3] = [features.PsychicBlades, features.WordsOfTerror]
features_by_level[6] = [features.MantleOfWhispers]
features_by_level[14] = [features.ShadowLore]
class Bard(CharClass):
name = "Bard"
hit_dice_faces = 8
subclass_select_level = 3
saving_throw_proficiencies = ("dexterity", "charisma")
primary_abilities = ("charisma",)
_proficiencies_text = (
"Light armor",
"simple weapons",
"hand crossbows",
"longswords",
"rapiers",
"shortswords",
"three musical instruments of your choice",
)
weapon_proficiencies = (
weapons.HandCrossbow,
weapons.Longsword,
weapons.Rapier,
weapons.Shortsword,
weapons.SimpleWeapon,
)
class_skill_choices = (
"Acrobatics",
"Animal Handling",
"Arcana",
"Athletics",
"Deception",
"History",
"Insight",
"Intimidation",
"Investigation",
"Medicine",
"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),
13: (4, 4, 3, 3, 3, 2, 1, 1, 0, 0),
14: (4, 4, 3, 3, 3, 2, 1, 1, 0, 0),
15: (4, 4, 3, 3, 3, 2, 1, 1, 1, 0),
16: (4, 4, 3, 3, 3, 2, 1, 1, 1, 0),
17: (4, 4, 3, 3, 3, 2, 1, 1, 1, 1),
18: (4, 4, 3, 3, 3, 3, 1, 1, 1, 1),
19: (4, 4, 3, 3, 3, 3, 2, 1, 1, 1),
20: (4, 4, 3, 3, 3, 3, 2, 2, 1, 1),
}