mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-06-07 13:15:53 +02:00
Added subclass descriptions
This commit is contained in:
@@ -8,28 +8,28 @@ sheet by running ``makesheets`` from the command line.
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
dungeonsheets_version = "0.8.0"
|
dungeonsheets_version = "0.8.3"
|
||||||
|
|
||||||
name = "Ben"
|
name = "Ben"
|
||||||
classes_levels = ['barbarian 1', 'bard 1', 'cleric 1', 'druid 1', 'fighter 1', 'monk 1', 'ranger 1', 'rogue 1', 'sorceror 1', 'warlock 1', 'wizard 1', 'revised ranger 1']
|
classes_levels = ['paladin 1']
|
||||||
subclasses = ["Path of the Berserker", "College of Lore", "Arcana Domain", "Circle of the Land", "Arcane Archer", "Way of the Open Hand", <dungeonsheets.classes.ranger.Hunter object at 0x108e7ba20>, "Thief", "Draconic Bloodline", "The Archfey Patron", "School of Abjuration", '']
|
subclasses = ["Oath of The Ancients"]
|
||||||
player_name = "Ben"
|
player_name = "Ben"
|
||||||
background = "Mercenary Veteran"
|
background = "Charlatan"
|
||||||
race = "Hill Dwarf"
|
race = "Hill Dwarf"
|
||||||
alignment = "Neutral good"
|
alignment = "Neutral good"
|
||||||
xp = 0
|
xp = 0
|
||||||
hp_max = 10
|
hp_max = 10
|
||||||
|
|
||||||
# Ability Scores
|
# Ability Scores
|
||||||
strength = 14
|
strength = 15
|
||||||
dexterity = 15
|
dexterity = 14
|
||||||
constitution = 15
|
constitution = 15
|
||||||
intelligence = 12
|
intelligence = 12
|
||||||
wisdom = 11
|
wisdom = 11
|
||||||
charisma = 8
|
charisma = 8
|
||||||
|
|
||||||
# Select what skills you're proficient with
|
# Select what skills you're proficient with
|
||||||
skill_proficiencies = ('nature', 'animal handling', 'athletics', 'persuasion')
|
skill_proficiencies = ('intimidation', 'athletics', 'deception', 'sleight of hand')
|
||||||
|
|
||||||
# Named features / feats that aren't part of your classes,
|
# Named features / feats that aren't part of your classes,
|
||||||
# race, or background.
|
# race, or background.
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
Add multiclass proficiencies to classes
|
Add multiclass proficiencies to classes
|
||||||
|
|
||||||
Add Warlock Incantations
|
Add Warlock Incantations
|
||||||
Add Warlock multiclass spell slots
|
Add Warlock multiclass spell slots
|
||||||
|
|
||||||
@@ -7,11 +6,6 @@ Add disadvantage on STEALTH with armor
|
|||||||
|
|
||||||
Add race / class AC bonuses
|
Add race / class AC bonuses
|
||||||
|
|
||||||
Add subclasses
|
|
||||||
Add features
|
Add features
|
||||||
Auto-add features to PDF
|
|
||||||
Add features description LaTeX page
|
|
||||||
**hard** integrate features automatically into math
|
**hard** integrate features automatically into math
|
||||||
|
|
||||||
Add Character.save() option to save to text file
|
|
||||||
Add Inspiration points
|
Add Inspiration points
|
||||||
|
|||||||
@@ -137,10 +137,6 @@ class Character():
|
|||||||
'race': race,
|
'race': race,
|
||||||
'background': background})
|
'background': background})
|
||||||
self.set_attrs(**attrs)
|
self.set_attrs(**attrs)
|
||||||
# instantiate any spells not listed properly
|
|
||||||
for S in self.spells_prepared:
|
|
||||||
if S not in [type(spl) for spl in self.spells]:
|
|
||||||
self._spells += (S(),)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@@ -263,7 +259,7 @@ class Character():
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def spells(self):
|
def spells(self):
|
||||||
spells = set(self._spells)
|
spells = set(self._spells) | set(self._spells_prepared)
|
||||||
for f in self.features:
|
for f in self.features:
|
||||||
spells |= set(f.spells_known) | set(f.spells_prepared)
|
spells |= set(f.spells_known) | set(f.spells_prepared)
|
||||||
for c in self.spellcasting_classes:
|
for c in self.spellcasting_classes:
|
||||||
@@ -564,12 +560,13 @@ class Character():
|
|||||||
for cl, sub in zip(classes_levels, subclasses):
|
for cl, sub in zip(classes_levels, subclasses):
|
||||||
try:
|
try:
|
||||||
c, _, lvl = cl.strip().rpartition(' ') # " wizard 3 " => "wizard", "3"
|
c, _, lvl = cl.strip().rpartition(' ') # " wizard 3 " => "wizard", "3"
|
||||||
|
c = c.title().replace(' ', '')
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
'classes_levels not properly formatted. Each entry should '
|
'classes_levels not properly formatted. Each entry should '
|
||||||
'be formatted \"class level\", but got {:s}'.format(cl))
|
'be formatted \"class level\", but got {:s}'.format(cl))
|
||||||
try:
|
try:
|
||||||
this_class = getattr(classes, c.title.replace(' ', ''))
|
this_class = getattr(classes, c)
|
||||||
this_level = int(lvl)
|
this_level = int(lvl)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise AttributeError(
|
raise AttributeError(
|
||||||
@@ -599,7 +596,7 @@ class Character():
|
|||||||
char=self,
|
char=self,
|
||||||
)
|
)
|
||||||
# Render the template
|
# Render the template
|
||||||
src_path = os.path.dirname(__file__)
|
src_path = os.path.join(os.path.dirname(__file__), 'forms/')
|
||||||
text = jinja2.Environment(
|
text = jinja2.Environment(
|
||||||
loader=jinja2.FileSystemLoader(src_path or './')
|
loader=jinja2.FileSystemLoader(src_path or './')
|
||||||
).get_template(template_file).render(context)
|
).get_template(template_file).render(context)
|
||||||
@@ -608,12 +605,10 @@ class Character():
|
|||||||
f.write(text)
|
f.write(text)
|
||||||
|
|
||||||
def to_pdf(self, filename, **kwargs):
|
def to_pdf(self, filename, **kwargs):
|
||||||
|
from .make_sheets import make_sheet
|
||||||
if filename.endswith('.pdf'):
|
if filename.endswith('.pdf'):
|
||||||
filename = filename.replace('pdf', 'py')
|
filename = filename.replace('pdf', 'py')
|
||||||
self.save(filename,
|
make_sheet(filename, char=self, flatten=kwargs.get('flatten', True))
|
||||||
template_file=kwargs.get('template_file',
|
|
||||||
'character_template.txt'))
|
|
||||||
subprocess.call(['makesheets', filename])
|
|
||||||
|
|
||||||
|
|
||||||
def read_character_file(filename):
|
def read_character_file(filename):
|
||||||
|
|||||||
@@ -16,5 +16,5 @@ from .sorceror import Sorceror
|
|||||||
from .warlock import Warlock
|
from .warlock import Warlock
|
||||||
from .wizard import Wizard
|
from .wizard import Wizard
|
||||||
|
|
||||||
available_classes = [Barbarian, Bard, Cleric, Druid, Fighter, Monk, Ranger,
|
available_classes = [Barbarian, Bard, Cleric, Druid, Fighter, Monk, Paladin,
|
||||||
Rogue, Sorceror, Warlock, Wizard, RevisedRanger]
|
Ranger, Rogue, Sorceror, Warlock, Wizard, RevisedRanger]
|
||||||
|
|||||||
@@ -5,33 +5,93 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class BerserkerPath(SubClass):
|
class BerserkerPath(SubClass):
|
||||||
|
"""For some barbarians, rage is a means to an end-—that end being
|
||||||
|
violence. The Path of the Berserker is a path of untrammeled fury, slick
|
||||||
|
with blood. As you enter the berserker’s rage, you thrill in the chaos of
|
||||||
|
battle, heedless of your own health or well-being.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Path of the Berserker"
|
name = "Path of the Berserker"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class TotemWarriorPath(SubClass):
|
class TotemWarriorPath(SubClass):
|
||||||
|
"""The Path of the Totem Warrior is a spiritual journey, as the barbarian
|
||||||
|
accepts a spirit animal as guide, protector, and inspiration. In battle,
|
||||||
|
your totem spirit fills you with supernatural might, adding magical fuel to
|
||||||
|
your barbarian rage.
|
||||||
|
|
||||||
|
Most barbarian tribes consider a totem animal to be kin to a particular
|
||||||
|
clan. In such cases, it is unusual for an individual to have more than one
|
||||||
|
totem animal spirit, though exceptions exist.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Path of the Totem Warrior"
|
name = "Path of the Totem Warrior"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
class BattleragerPath(SubClass):
|
class BattleragerPath(SubClass):
|
||||||
|
"""Known as Kuldjargh (literally "axe idiot") in Dwarvish, battleragers are
|
||||||
|
dwarf followers of the gods of war and take the Path of the
|
||||||
|
Battlerager. They specialize in wearing bulky, spiked armor and throwing
|
||||||
|
themselves into combat, striking with their body itself and giving
|
||||||
|
themselves over to the fury of battle.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Path of the Battlerager"
|
name = "Path of the Battlerager"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class AncestralGuardianPath(SubClass):
|
class AncestralGuardianPath(SubClass):
|
||||||
|
"""Some barbarians hail from cultures that revere their ancestors. These
|
||||||
|
tribes teach that the warriors of the past linger in the world as mighty
|
||||||
|
spirits, who can guide and protect the living. When a barbarian who follows
|
||||||
|
this path rages, the barbarian contacts the spirit world and calls on these
|
||||||
|
guardian spirits for aid.
|
||||||
|
|
||||||
|
Barbarians who draw on their ancestral guardians can better fight to
|
||||||
|
protect their tribes and their allies. In order to cement ties to their
|
||||||
|
ancestral guardians, barbarians who follow this path cover themselves in
|
||||||
|
elabo— rate tattoos that celebrate their ancestors’ deeds. These tattoos
|
||||||
|
tell sagas of victories against terrible monsters and other fearsome
|
||||||
|
rivals.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Path of the Ancestral Guardian"
|
name = "Path of the Ancestral Guardian"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class StormHeraldPath(SubClass):
|
class StormHeraldPath(SubClass):
|
||||||
|
"""All barbarians harbor a fury within. Their rage grants them superior
|
||||||
|
strength, durability, and speed. Barbarians who follow the Path of the
|
||||||
|
Storm Herald learn to transform that rage into a mantle of primal magic,
|
||||||
|
which swirls around them. When in a fury, a barbarian ofthis path taps into
|
||||||
|
the forces of nature to create powerful magical effects.
|
||||||
|
|
||||||
|
Storm heralds are typically elite champions who train alongside druids,
|
||||||
|
rangers, and others sworn to protect nature. Other storm heralds hone their
|
||||||
|
craft in lodges in regions wracked by storms, in the frozen reaches at the
|
||||||
|
world’s end, or deep in the hottest deserts.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Path of the Storm Herald"
|
name = "Path of the Storm Herald"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class ZealotPath(SubClass):
|
class ZealotPath(SubClass):
|
||||||
|
"""Some deities inspire their followers to pitch themselves into a ferocious
|
||||||
|
battle fury. These barbarians are zealots—warriors who channel their rage
|
||||||
|
into powerful disn plays of divine power.
|
||||||
|
|
||||||
|
A variety of gods across the worlds of D&D inspire their followers to
|
||||||
|
embrace this path. Tempus from the Forgotten Realms and Hextor and Erythnul
|
||||||
|
of Greyhawk are all prime examples. In general, the gods who inspire
|
||||||
|
zealots are deities of combat, destruction, and violence. Not all are evil,
|
||||||
|
but few are good
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Path of the Zealot"
|
name = "Path of the Zealot"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -5,27 +5,110 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class CollegeOfLore(SubClass):
|
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"
|
name = "College of Lore"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class CollegeOfValor(SubClass):
|
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"
|
name = "College of Valor"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class CollegeOfGlamour(SubClass):
|
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"
|
name = "College of Glamour"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class CollegeOfSwords(SubClass):
|
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"
|
name = "College of Swords"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class CollegeOfWhispers(SubClass):
|
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"
|
name = "College of Whispers"
|
||||||
class_features_by_level = defaultdict(list)
|
class_features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ class CharClass():
|
|||||||
|
|
||||||
class SubClass():
|
class SubClass():
|
||||||
"""
|
"""
|
||||||
A generic subclass object
|
A generic subclass object. Add more detail in the __doc__ attribute.
|
||||||
"""
|
"""
|
||||||
name = ''
|
name = ''
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
@@ -104,6 +104,7 @@ class SubClass():
|
|||||||
spells_prepared = ()
|
spells_prepared = ()
|
||||||
|
|
||||||
def __init__(self, level):
|
def __init__(self, level):
|
||||||
|
self.__doc__ = self.__doc__ or SubClass.__doc__
|
||||||
self.class_level = level
|
self.class_level = level
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|||||||
@@ -4,53 +4,178 @@ from collections import defaultdict
|
|||||||
|
|
||||||
|
|
||||||
class KnowledgeDomain(SubClass):
|
class KnowledgeDomain(SubClass):
|
||||||
|
"""The gods of knowledge—including Oghma, Boccob, Gilean, Aureon, and
|
||||||
|
Thoth—value learning and understanding above all. Some teach that knowledge
|
||||||
|
is to be gathered and shared in libraries and universities, or promote the
|
||||||
|
practical knowledge of craft and invention. Some deities hoard knowledge
|
||||||
|
and keep its secrets to themselves. And some promise their followers that
|
||||||
|
they will gain tremendous power if they unlock the secrets of the
|
||||||
|
multiverse. Followers of these gods study esoteric lore, collect old tomes,
|
||||||
|
delve into the secret places of the earth, and learn all they can. Some
|
||||||
|
gods of knowledge promote the practical knowledge of craft and invention,
|
||||||
|
including smith deities like Gond, Reorx, Onatar, Moradin, Hephaestus, and
|
||||||
|
Goibhniu.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Knowledge Domain"
|
name = "Knowledge Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class LifeDomain(SubClass):
|
class LifeDomain(SubClass):
|
||||||
|
"""The Life domain focuses on the vibrant positive energy—one of the
|
||||||
|
fundamental forces of the universe— that sustains all life. The gods of
|
||||||
|
life promote vitality and health through healing the sick and wounded,
|
||||||
|
caring for those in need, and driving away the forces of death and
|
||||||
|
undeath. Almost any non-evil deity can claim influence over this domain,
|
||||||
|
particularly agricultural deities (such as Chauntea, Arawai, and Demeter),
|
||||||
|
sun gods (such as Lathander, Pelor, and Re-Horakhty), gods of healing or
|
||||||
|
endurance (such as Ilmater, Mishakal, Apollo, and Diancecht), and gods of
|
||||||
|
home and community (such as Hestia, Hathor, and Boldrei).
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Life Domain"
|
name = "Life Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class LightDomain(SubClass):
|
class LightDomain(SubClass):
|
||||||
|
"""Gods of light—including Helm, Lathander, Pholtus, Branchala, the Silver
|
||||||
|
Flame, Belenus, Apollo, and Re-Horakhty—promote the ideals of rebirth and
|
||||||
|
renewal, truth, vigilance, and beauty, often using the symbol of the
|
||||||
|
sun. Some of these gods are portrayed as the sun itself or as a charioteer
|
||||||
|
who guides the sun across the sky. Others are tireless sentinels whose eyes
|
||||||
|
pierce every shadow and see through every deception. Some are deities of
|
||||||
|
beauty and artistry, who teach that art is a vehicle for the soul's
|
||||||
|
improvement. Clerics of a god of light are enlightened souls infused with
|
||||||
|
radiance and the power of their gods’ discerning vision, charged with
|
||||||
|
chasing away lies and burning away darkness.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Light Domain"
|
name = "Light Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class NatureDomain(SubClass):
|
class NatureDomain(SubClass):
|
||||||
|
"""Gods of nature are as varied as the natural world itself, from inscrutable
|
||||||
|
gods of the deep forests (such as Silvanus, Obad-Hai, Chislev, Balinor, and
|
||||||
|
Pan) to friendly deities associated with particular springs and groves
|
||||||
|
(such as Eldath). Druids revere nature as a whole and might serve one of
|
||||||
|
these deities, practicing mysterious rites and reciting all-but-forgotten
|
||||||
|
prayers in their own secret tongue. But many of these gods have clerics as
|
||||||
|
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"
|
name = "Nature Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class TempestDomain(SubClass):
|
class TempestDomain(SubClass):
|
||||||
|
"""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
|
||||||
|
wrath.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Tempest Domain"
|
name = "Tempest Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class TrickeryDomain(SubClass):
|
class TrickeryDomain(SubClass):
|
||||||
|
"""Gods of trickery—such as Tymora, Beshaba, Olidammara, the Traveler, Garl
|
||||||
|
Glittergold, and Loki—are mischief-makers and instigators who stand as a
|
||||||
|
constant challenge to the accepted order among both gods and
|
||||||
|
mortals. They’re patrons of thieves, scoundrels, gamblers, rebels, and
|
||||||
|
liberators. Their clerics are a disruptive force in the world, puncturing
|
||||||
|
pride, mocking tyrants, stealing from the rich, freeing captives, and
|
||||||
|
flouting hollow traditions. They prefer subterfuge, pranks, deception, and
|
||||||
|
theft rather than direct confrontation.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Trickery Domain"
|
name = "Trickery Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class WarDomain(SubClass):
|
class WarDomain(SubClass):
|
||||||
|
"""War has many manifestations. It can make heroes of ordinary people. It can
|
||||||
|
be desperate and horrific, with acts of cruelty and cowardice eclipsing
|
||||||
|
instances of excellence and courage. In either case, the gods of war watch
|
||||||
|
over warriors and reward them for their great deeds. The clerics of such
|
||||||
|
gods excel in battle, inspiring others to fight the good fight or offering
|
||||||
|
acts of violence as prayers. Gods of war include champions of honor and
|
||||||
|
chivalry (such as Torm, Heironeous, and KiriJolith) as well as gods of
|
||||||
|
destruction and pillage (such as Erythnul, the Fury, Gruumsh, and Ares) and
|
||||||
|
gods of conquest and domination (such as Bane, Hextor, and
|
||||||
|
Maglubiyet). Other war gods (such as Tempus, Nike, and Nuada) take a more
|
||||||
|
neutral stance, promoting war in all its manifestations and supporting
|
||||||
|
warriors in any circumstance.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "War Domain"
|
name = "War Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
class ArcanaDomain(SubClass):
|
class ArcanaDomain(SubClass):
|
||||||
|
"""Magic is an energy that suffuses the multiverse and that fuels both
|
||||||
|
destruction and creation. Gods of the Arcana domain know the secrets and
|
||||||
|
potential of magic intimately. For some of these gods, magical knowledge
|
||||||
|
is a great responsibility that comes with a special understanding of the
|
||||||
|
nature of reality. Other gods of Arcana see magic as pure power, to be used
|
||||||
|
as its wielder sees fit.
|
||||||
|
|
||||||
|
The gods of this domain are often associated with knowledge, as learning
|
||||||
|
and arcane power tend to go hand-in-hand. In the Realms, deities of this
|
||||||
|
domain include Azuth and Mystra, as well as Corellon Larethian of the
|
||||||
|
elven pantheon. In other worlds, this domain includes Hecate, Math
|
||||||
|
Mathonwy, and Isis; the triple moon gods of Solinari , Lunitari, and
|
||||||
|
Nuitari of Krynn; and Boccob, Vecna, and WeeJas of Greyhawk.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Arcana Domain"
|
name = "Arcana Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class ForgeDomain(SubClass):
|
class ForgeDomain(SubClass):
|
||||||
|
"""The gods of the forge are patrons of artisans who work with metal, from a
|
||||||
|
humble blacksmith who keeps a village in horseshoes and plow blades to the
|
||||||
|
mighty elf artisan whose diamond-tipped arrows of mithral have felled demon
|
||||||
|
lords. The gods of the forge teach that, with patience and hard work, even
|
||||||
|
the most intractable metal can be transformed from a lump of ore to a beau—
|
||||||
|
tifully wrought object. Clerics of these deities search for objects lost to
|
||||||
|
the forces of darkness, liberate mines overrun by ores, and uncover rare
|
||||||
|
and wondrous materials necessary to create potent magic items. Followers
|
||||||
|
of these gods take great pride in their work, and they are willing to craft
|
||||||
|
and use heavy armor and powerful weapons to protect them. Deities of this
|
||||||
|
domain include Gond, Reorx, Onatar, Moradin, Hephaestus, and Goibhniu.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Forge Domain"
|
name = "Forge Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class GraveDomain(SubClass):
|
class GraveDomain(SubClass):
|
||||||
|
"""Gods of the grave watch over the line between life and death. To these
|
||||||
|
deities, death and the afterlife are a foundational part of the
|
||||||
|
multiverse. To desecrate the peace of the dead is an abomination. Deities
|
||||||
|
of the grave include Kelemvor, Wee jas, the ancestral spirits of the
|
||||||
|
Undying Court, Hades, Anubis, and Osiris. Followers of these deities seek
|
||||||
|
to put wandering spirits to rest, destroy the undead, and ease the
|
||||||
|
suffering of the dying. Their magic also allows them to stave off death for
|
||||||
|
a time. particularly for a person who still has some great work to
|
||||||
|
accomplish in the world. This is a delay of death, not a denial of it, for
|
||||||
|
death will eventually get its due.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Grave Domain"
|
name = "Grave Domain"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,34 @@ import math
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class LandCircle(SubClass):
|
class LandCircle(SubClass):
|
||||||
|
"""The Circle of the Land is made up of mystics and sages who safeguard
|
||||||
|
ancient knowledge and rites through a vast oral tradition. These druids
|
||||||
|
meet within sacred circles of trees or standing stones to whisper primal
|
||||||
|
secrets in Druidic. The circle’s wisest members preside as the chief
|
||||||
|
priests of communities that hold to the Old Faith and serve as advisors to
|
||||||
|
the rulers of those folk. As a member of this circle, your magic is
|
||||||
|
influenced by the land where you were initiated into the circle’s
|
||||||
|
mysterious rites
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Circle of the Land"
|
name = "Circle of the Land"
|
||||||
circle = "land"
|
circle = "land"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class MoonCircle(SubClass):
|
class MoonCircle(SubClass):
|
||||||
|
"""Druids of the Circle of the Moon are fierce guardians of the wilds. Their
|
||||||
|
order gathers under the full moon to share news and trade warnings. They
|
||||||
|
haunt the deepest parts of the wilderness, where they might go for weeks on
|
||||||
|
end before crossing paths with another humanoid creature, let alone another
|
||||||
|
druid.
|
||||||
|
|
||||||
|
Changeable as the moon, a druid of this circle might prowl as a great cat
|
||||||
|
one night, soar over the treetops as an eagle the next day, and crash
|
||||||
|
through the undergrowth in bear form to drive off a trespassing
|
||||||
|
monster. The wild is in the druid's blood.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Circle of the Moon"
|
name = "Circle of the Moon"
|
||||||
circle = "moon"
|
circle = "moon"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
@@ -21,12 +43,39 @@ class MoonCircle(SubClass):
|
|||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class DreamsCircle(SubClass):
|
class DreamsCircle(SubClass):
|
||||||
|
"""Druids who are members of the Circle of Dreams hail from regions that have
|
||||||
|
strong ties to the Feywild and its dreamlike realms. The druids’
|
||||||
|
guardianship of the natural world makes for a natural alliance between them
|
||||||
|
and good-aligned fey. These druids seek to fill the world with dreamy
|
||||||
|
wonder. Their magic mends wounds and brings joy to downcast hearts, and the
|
||||||
|
realms they protect are gleaming, fruitful places, where dream and reality
|
||||||
|
blur together and where the weary can find rest.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Circle of Dreams"
|
name = "Circle of Dreams"
|
||||||
circle = "dreams"
|
circle = "dreams"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class ShepherdCircle(SubClass):
|
class ShepherdCircle(SubClass):
|
||||||
|
"""Druids of the Circle of the Shepherd commune with the spirits of nature,
|
||||||
|
especially the spirits of beasts and the fey, and call to those spirits for
|
||||||
|
aid. These druids recognize that all living things play a role in the
|
||||||
|
natural world, yet they focus on protecting animals and fey creatures that
|
||||||
|
have difficulty defending themselves. Shepherds, as they are known, see
|
||||||
|
such creatures as their charges. They ward off monsters that threaten them,
|
||||||
|
rebuke hunters who kill more prey than necessary, and prevent civilization
|
||||||
|
from encroaching on rare animal habitats and on sites sacred to the
|
||||||
|
fey. Many of these druids are happiest far from cities and towns, content
|
||||||
|
to spend their days in the company of animals and the fey creatures of the
|
||||||
|
wilds.
|
||||||
|
|
||||||
|
Members of this circle become adventurers to oppose forces that threaten
|
||||||
|
their charges or to seek knowledge and power that will help them safeguard
|
||||||
|
their charges better. Wherever these druids go, the spirits of the wil—
|
||||||
|
derness are with them
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Circle of the Shepherd"
|
name = "Circle of the Shepherd"
|
||||||
circle = "shepherd"
|
circle = "shepherd"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|||||||
@@ -5,16 +5,40 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class Champion(SubClass):
|
class Champion(SubClass):
|
||||||
|
"""The archetypal Champion focuses on the development of raw physical power
|
||||||
|
honed to deadly perfection. Those who model themselves on this archetype
|
||||||
|
combine rigorous training with physical excellence to deal devastating
|
||||||
|
blows.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Champion"
|
name = "Champion"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class BattleMaster(SubClass):
|
class BattleMaster(SubClass):
|
||||||
|
"""Those who emulate the archetypal Battle Master employ martial techniques
|
||||||
|
passed down through generations. To a Battle Master, combat is an academic
|
||||||
|
field, sometimes including subjects beyond battle such as weaponsmithing
|
||||||
|
and calligraphy. Not every fighter absorbs the lessons of history, theory,
|
||||||
|
and artistry that are reflected in the Battle Master archetype, but those
|
||||||
|
who do are well-rounded fighters of great skill and knowledge
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Battle Master"
|
name = "Battle Master"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class EldritchKnight(SubClass):
|
class EldritchKnight(SubClass):
|
||||||
|
"""The archetypal Eldritch Knight combines the martial mastery common to all
|
||||||
|
fighters with a careful study of magic. Eldritch Knights use magical
|
||||||
|
techniques similar to those practiced by wizards. They focus their study on
|
||||||
|
two of the eight schools of magic: abjuration and evocation. Abjuration
|
||||||
|
spells grant an Eldritch Knight additional protection in battle, and
|
||||||
|
evocation spells deal damage to many foes at once, extending the fighter’s
|
||||||
|
reach in combat. These knights learn a comparatively small number of
|
||||||
|
spells, committing them to memory instead of keeping them in a spellbook.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Eldritch Knight"
|
name = "Eldritch Knight"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
spellcasting_ability = 'intelligence'
|
spellcasting_ability = 'intelligence'
|
||||||
@@ -45,22 +69,63 @@ class EldritchKnight(SubClass):
|
|||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
class PurpleDragonKnight(SubClass):
|
class PurpleDragonKnight(SubClass):
|
||||||
|
"""Purple Dragon knights are warriors who hail from the kingdom of
|
||||||
|
Cormyr. Pledged to protect the crown, they take the fight against evil
|
||||||
|
beyond their kingdom's borders. They are tasked with wandering the land as
|
||||||
|
knights errant, relying on their judgment, bravery, and fidelity to the
|
||||||
|
code of chivalry to guide them in defeating evildoers.
|
||||||
|
|
||||||
|
A Purple Dragon knight inspires greatness in others by committing brave
|
||||||
|
deeds in battle. The mere presence of a knight in a hamlet is enough to
|
||||||
|
cause some ores and bandits to seek easier prey. A lone knight is a skilled
|
||||||
|
warrior, but a knight leading a band of allies can transform even the most
|
||||||
|
poorly equipped militia into a ferocious war band.
|
||||||
|
|
||||||
|
A knight prefers to lead through deeds, not words. As a knight spearheads
|
||||||
|
an attack, the knight's actions can awaken reserves of courage and
|
||||||
|
conviction in allies that they never suspected they had.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Purple Dragon Knight"
|
name = "Purple Dragon Knight"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class ArcaneArcher(SubClass):
|
class ArcaneArcher(SubClass):
|
||||||
|
"""An Arcane Archer studies a unique elven method of archery that weaves magic
|
||||||
|
into attacks to produce supernatural effects. Arcane Archers are some of
|
||||||
|
the most elite warriors among the elves. They stand watch over the fringes
|
||||||
|
of elven domains, keeping a keen eye out for trespassers and using
|
||||||
|
magic—infused arrows to defeat monsters and invaders before they can reach
|
||||||
|
elven set— tlements. Over the centuries, the methods of these elf archers
|
||||||
|
have been learned by members of other races who can also balance arcane
|
||||||
|
aptitude with archery.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Arcane Archer"
|
name = "Arcane Archer"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Cavalier(SubClass):
|
class Cavalier(SubClass):
|
||||||
|
"""The archetypal Cavalier excels at mounted combat. Usually born among the
|
||||||
|
nobility and raised at court, a Cavalier is equally at home leading a
|
||||||
|
cavalry charge or exchanging repartee at a state dinner. Cavaliers also
|
||||||
|
learn how to guard those in their charge from harm, often serving as the
|
||||||
|
protectors of their superiors and of the weak. Compelled to right wrongs or
|
||||||
|
earn prestige, many of these fighters leave their lives of comfort to
|
||||||
|
embark on glorious adventure
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Cavalier"
|
name = "Cavalier"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Samurai(SubClass):
|
class Samurai(SubClass):
|
||||||
|
"""The Samurai is a fighter who draws on an implacable fighting spirit to
|
||||||
|
overcome enemies. A Samurai’s resolve is nearly unbreakable, and the
|
||||||
|
enemies in a Samurai's path have two choices: yield or die fighting
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Samurai"
|
name = "Samurai"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -5,37 +5,104 @@ from .classes import CharClass, SubClass
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
|
# PHB
|
||||||
class OpenHandWay(SubClass):
|
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"
|
name = "Way of the Open Hand"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class ShadowWay(SubClass):
|
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
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Way of Shadow"
|
name = "Way of Shadow"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class FourElementsWay(SubClass):
|
class FourElementsWay(SubClass):
|
||||||
|
"""You follow a monastic tradition that teaches you to harness the
|
||||||
|
elements. When you focus your ki, you can align yourself with the forces of
|
||||||
|
creation and bend the four elements to your will, using them as an
|
||||||
|
extension of your body. Some members of this tradition dedicate themselves
|
||||||
|
to a single element, but others weave the elements together.
|
||||||
|
|
||||||
|
Many monks of this tradition tattoo their bodies with representations of
|
||||||
|
their ki powers, commonly imagined as coiling dragons, but also as
|
||||||
|
phoenixes, fish, plants, mountains, and cresting waves.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Way of the Four Elements"
|
name = "Way of the Four Elements"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
|
# SCAG
|
||||||
class SunSoulWay(SubClass):
|
class SunSoulWay(SubClass):
|
||||||
|
"""Monks of the Way of the Sun Soul learn to channel their own life energy
|
||||||
|
into searing bolts of light. They teach that meditation can unlock the
|
||||||
|
ability to unleash the indomitable light shed by the soul of every living
|
||||||
|
creature
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Way of the Sun Soul"
|
name = "Way of the Sun Soul"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class LongDeathWay(SubClass):
|
class LongDeathWay(SubClass):
|
||||||
|
"""Monks of the Way of the Long Death are obsessed with the meaning and
|
||||||
|
mechanics of dying. They capture creatures and prepare elaborate
|
||||||
|
experiments to capture, record, and understand the moments of their
|
||||||
|
demise. They then use this knowledge to guide their understanding of
|
||||||
|
martial arts, yielding a deadly fighting style.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Way of the Long Death"
|
name = "Way of the Long Death"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
|
# XGTE
|
||||||
class DrunkenMasterWay(SubClass):
|
class DrunkenMasterWay(SubClass):
|
||||||
|
"""The Way of the Drunken Master teaches its students to move with the jerky,
|
||||||
|
unpredictable movements of a drunkard. A drunken master sways, tottering on
|
||||||
|
unsteady feet, to present what seems like an incompetent combatant who
|
||||||
|
proves frustrating to engage. The drunken master’s erratic stumbles conceal
|
||||||
|
a carefully executed dance of blocks, parries, advances, attacks, and
|
||||||
|
retreats.
|
||||||
|
|
||||||
|
A drunken master often enjoys playing the fool to bring gladness to the
|
||||||
|
despondent or to demonstrate humility to the arrogant, but when battle is
|
||||||
|
joined, the drunken master can be a maddening, masterful foe
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Way of the Drunken Master"
|
name = "Way of the Drunken Master"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class KenseiWay(SubClass):
|
class KenseiWay(SubClass):
|
||||||
|
"""Monks of the Way of the Kensei train relentlessly with their weapons, to
|
||||||
|
the point where the weapon becomes an extension of the body. Founded on a
|
||||||
|
mastery of sword fighting, the tradition has expanded to include many
|
||||||
|
different weapons.
|
||||||
|
|
||||||
|
A kensei sees a weapon in much the same way a calligrapher or painter
|
||||||
|
regards a pen or brush. Whatever the weapon, the kensei views it as a tool
|
||||||
|
used to express the beauty and precision of the martial arts. That such
|
||||||
|
mastery makes a kensei a peerless warrior is but a side effect of intense
|
||||||
|
devotion, practice, and study.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Way of the Kensei"
|
name = "Way of the Kensei"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -4,31 +4,217 @@ from collections import defaultdict
|
|||||||
|
|
||||||
|
|
||||||
class OathOfDevotion(SubClass):
|
class OathOfDevotion(SubClass):
|
||||||
|
"""The Oath of Devotion binds a paladin to the loftiest ideals of justice,
|
||||||
|
virtue, and order. Sometim es called cavaliers, white knights, or holy
|
||||||
|
warriors, these paladins meet the ideal of the knight in shining armor,
|
||||||
|
acting with honor in pursuit o f justice and the greater good. They hold
|
||||||
|
themselves to the highest standards of conduct, and some, for better or
|
||||||
|
worse, hold the rest of the world to the same standards. Many who swear
|
||||||
|
this oath are devoted to gods of law and good and use their gods’ tenets as
|
||||||
|
the measure o f their devotion. They hold angels—the perfect servants o f
|
||||||
|
good—as their ideals, and incorporate images of angelic wings into their
|
||||||
|
helmets or coats of arms.
|
||||||
|
|
||||||
|
**Tenets of Devotion**: Though the exact words and strictures of the Oath
|
||||||
|
of Devotion vary, paladins of this oath share these tenets.
|
||||||
|
|
||||||
|
--Honesty. Don’t lie or cheat. Let your word be your promise.
|
||||||
|
|
||||||
|
--Courage. Never fear to act, though caution is wise.
|
||||||
|
|
||||||
|
--Compassion. Aid others, protect the weak, and punish those who threaten
|
||||||
|
them. Show mercy to your foes, but temper it with wisdom.
|
||||||
|
|
||||||
|
--Honor. Treat others with fairness, and let your honorable deeds be an
|
||||||
|
example to them. Do as much good as possible while causing the least amount
|
||||||
|
of harm.
|
||||||
|
|
||||||
|
--Duty. Be responsible for your actions and their consequences, protect
|
||||||
|
those entrusted to your care, and obey those who have just authority over
|
||||||
|
you.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Oath of Devotion"
|
name = "Oath of Devotion"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class OathOfAncients(SubClass):
|
class OathOfAncients(SubClass):
|
||||||
|
"""The Oath of the Ancients is as old as the race of elves and the rituals of
|
||||||
|
the druids. Sometimes called fey knights, green knights, or horned knights,
|
||||||
|
paladins who swear this oath cast their lot with the side of the light in
|
||||||
|
the cosm ic struggle against darkness because they love the beautiful and
|
||||||
|
life-giving things of the world, not necessarily because they believe in
|
||||||
|
principles of honor, courage, and justice. They adorn their armor and
|
||||||
|
clothing with images of growing things—leaves, antlers, or flowers—to
|
||||||
|
reflect their commitment to preserving life and light in the world.
|
||||||
|
|
||||||
|
**Tenets of the Ancients**: The tenets of the Oath of the Ancients have
|
||||||
|
been preserved for uncounted centuries. This oath emphasizes the
|
||||||
|
principles of good above any concerns of law or chaos. Its four central
|
||||||
|
principles are simple.
|
||||||
|
|
||||||
|
--Kindle the Light. Through your acts of mercy, kindness, and forgiveness,
|
||||||
|
kindle the light of hope in the world, beating back despair.
|
||||||
|
|
||||||
|
--Shelter the Light. Where there is good, beauty, love, and laughter in the
|
||||||
|
world, stand against the w ickedness that would swallow it. Where life
|
||||||
|
flourishes, stand against the forces that would render it barren.
|
||||||
|
|
||||||
|
--Preserve Your Own Light. Delight in song and laughter, in beauty and
|
||||||
|
art. If you allow the light to die in your own heart, you can’t preserve it
|
||||||
|
in the world.
|
||||||
|
|
||||||
|
--Be the Light. Be a glorious beacon for all who live in despair. Let the
|
||||||
|
light of your joy and courage shine forth in all your deeds.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Oath of The Ancients"
|
name = "Oath of The Ancients"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class OathOfVengance(SubClass):
|
class OathOfVengance(SubClass):
|
||||||
|
"""The Oath of Vengeance is a solemn commitment to punish those who have
|
||||||
|
committed a grievous sin. When evil forces slaughter helpless villagers,
|
||||||
|
when an entire people turns against the will of the gods, when a thieves’
|
||||||
|
guild grows too violent and powerful, when a dragon rampages through the
|
||||||
|
countryside—at times like these, paladins arise and swear an Oath of
|
||||||
|
Vengeance to set right that which has gone wrong. To these paladins—
|
||||||
|
sometimes called avengers or dark knights—their own purity is not as
|
||||||
|
important as delivering justice.
|
||||||
|
|
||||||
|
**Tenets of Vengance**: The tenets of the Oath of Vengeance vary by
|
||||||
|
paladin, but all the tenets revolve around punishing wrongdoers by any
|
||||||
|
means necessary. Paladins who uphold these tenets are willing to sacrifice
|
||||||
|
even their own righteousness to mete out justice upon those who do evil, so
|
||||||
|
the paladins are often neutral or lawful neutral in alignment. The core
|
||||||
|
principles of the tenets are brutally simple.
|
||||||
|
|
||||||
|
--Fight the Greater Evil. Faced with a choice of fighting my sworn foes or
|
||||||
|
combating a lesser evil. I choose the greater evil.
|
||||||
|
|
||||||
|
--No Mercy for the Wicked. Ordinary foes might win my mercy, but my sworn
|
||||||
|
enemies do not.
|
||||||
|
|
||||||
|
--By Any Means Necessary. My qualms can’t get in the way of exterminating
|
||||||
|
my foes.
|
||||||
|
|
||||||
|
--Restitution. If my foes wreak ruin on the world, it is because I failed
|
||||||
|
to stop them. I must help those harmed by their misdeeds.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Oath of Vengance"
|
name = "Oath of Vengance"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class OathOfCrown(SubClass):
|
class OathOfCrown(SubClass):
|
||||||
|
"""The Oath of the Crown is sworn to the ideals of civilization, be it the
|
||||||
|
spirit of a nation, fealty to a sovereign, or service to a deity of law and
|
||||||
|
rulership. The paladins who swear this oath dedicate themselves to serving
|
||||||
|
society and, in particular, the just laws that hold society together. These
|
||||||
|
paladins are the watchful guardians on the walls, standing against the
|
||||||
|
chaotic tides of barbarism that threaten to tear down all that
|
||||||
|
civilization has built, and are commonly known as guardians, exemplars,
|
||||||
|
or sentinels. Often, paladins who swear this oath are members of an order
|
||||||
|
of knighthood in service to a nation or a sovereign, and undergo their oath
|
||||||
|
as part of their admission to the order's ranks.
|
||||||
|
|
||||||
|
**Tenets of the Crown**: The tenets of the Oath of the Crown are often set
|
||||||
|
by the sovereign to which their oath is sworn, but generally emphasize
|
||||||
|
the following tenets.
|
||||||
|
|
||||||
|
--Law. The law is paramount. It is the mortar that holds the stones of
|
||||||
|
civilization together, and it must be respected.
|
||||||
|
|
||||||
|
--Loyalty. Your word is your bond. Without loyalty, oaths and laws are
|
||||||
|
meaningless.
|
||||||
|
|
||||||
|
--Courage. You must be willing to do what needs to be done for the sake of
|
||||||
|
order, even in the face of overwhelming odds. If you don't act, then who
|
||||||
|
will?
|
||||||
|
|
||||||
|
--Responsibility. You must deal with the consequences of your actions, and
|
||||||
|
you are responsible for fulfilling your duties and obligations.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Oath of The Crown"
|
name = "Oath of The Crown"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class OathOfConquest(SubClass):
|
class OathOfConquest(SubClass):
|
||||||
|
"""The Oath of Conquest calls to paladins who seek glory in battle and the
|
||||||
|
subjugation of their enemies. It isn’t enough for these paladins to
|
||||||
|
establish order. They must crush the forces of chaos. Sometimes called
|
||||||
|
knight ty- rants or iron mongers, those who swear this oath gather into
|
||||||
|
grim orders that serve gods or philosophies of war and well-ordered might.
|
||||||
|
|
||||||
|
Some of these paladins go so far as to consort with the powers of the Nine
|
||||||
|
Hells, valuing the rule of law over the balm of mercy. The archdevil Bel,
|
||||||
|
warlord of Avernus, counts many of these paladins—called hell knights—as
|
||||||
|
his most ardent supporters. Hell knights cover their armor with trophies
|
||||||
|
taken from fallen en— emies, a grim~warning to any who dare oppose them and
|
||||||
|
the decrees of their lords. These knights are often most fiercely resisted
|
||||||
|
by other paladins of this oath, who believe that the hell knights have
|
||||||
|
wandered too far into darkness.
|
||||||
|
|
||||||
|
**Tenets of Conquest**: A paladin who takes this oath has the tenets of
|
||||||
|
conquest seared on the upper arm.
|
||||||
|
|
||||||
|
--Douse the Flame of Hope. It is not enough
|
||||||
|
to merely defeat an enemy in battle. Your victory must be so over- whelming
|
||||||
|
that your enemies' will to fight is shattered forever. A blade can end a
|
||||||
|
life. Fear can end an empire.
|
||||||
|
|
||||||
|
--Rule with an Iron Fist. Once you have conquered, tolerate no
|
||||||
|
dissent. Your word is law. Those who obey it shall be favored. Those who
|
||||||
|
defy it shall be punished as an example to all who might follow.
|
||||||
|
|
||||||
|
--Strength Above All. You shall rule until a stronger one arises. Then you
|
||||||
|
must grow mightier and meet the challenge, or fall to your own ruin.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Oath of Conquest"
|
name = "Oath of Conquest"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class OathOfRedemption(SubClass):
|
class OathOfRedemption(SubClass):
|
||||||
|
"""The Oath of Redemption sets a paladin on a difficult path, one that requires
|
||||||
|
a holy warrior to use violence only as a last resort. Paladins who dedicate
|
||||||
|
themselves to this oath believe that any person can be redeemed and that
|
||||||
|
the path of benevolence and justice is one that anyone can walk. These
|
||||||
|
paladins face evil creatures in the hope of turning their foes to the
|
||||||
|
light, and they slay their enemies only when such a deed will clearly save
|
||||||
|
other lives. Paladins who follow this path are known as redeemers.
|
||||||
|
|
||||||
|
While redeemers are idealists, they are no fools. Re— deemers know that
|
||||||
|
undead, demons, devils, and other supernatural threats can be inherently
|
||||||
|
evil. Against such fees, paladins who swear this oath bring the full wrath
|
||||||
|
of their weapons and spells to bear. Yet the re- deemers still pray that,
|
||||||
|
one day, even creatures of wick- edness will invite their own redemption.
|
||||||
|
|
||||||
|
**Tenets of Redemption**: The tenets of the Oath of Redemption hold a
|
||||||
|
paladin to a high standard of peace and justice.
|
||||||
|
|
||||||
|
--Peace. Violence is a weapon of last resort. Diplomacy and understanding
|
||||||
|
are the paths to long-lasting peace.
|
||||||
|
|
||||||
|
--Innocence. All people begin life in an innocent state, and it is their
|
||||||
|
environment or the influence of dark forces that drives them to evil. By
|
||||||
|
setting the proper example, and working to heal the wounds of a deeply
|
||||||
|
flawed world, you can set anyone on a righteous path.
|
||||||
|
|
||||||
|
--Patience. Change takes time. Those who have walked the path of the wicked
|
||||||
|
must be given reminders to keep them honest and true. Once you have planted
|
||||||
|
the seed of righteousness in a creature, you must work day after day to
|
||||||
|
allow that seed to survive and flourish.
|
||||||
|
|
||||||
|
--Wisdom. Your heart and mind must stay clear, for eventually you will be
|
||||||
|
forced to admit defeat. While ev- ery creature can be redeemed, some are so
|
||||||
|
far along the path of evil that you have no choice but to end their lives
|
||||||
|
for the greater good. Any such action must be carefully weighed and the
|
||||||
|
consequences fully understood, but once you have made the decision, follow
|
||||||
|
through with it knowing your path is just.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Oath of Redemption"
|
name = "Oath of Redemption"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -7,27 +7,66 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class Hunter(SubClass):
|
class Hunter(SubClass):
|
||||||
|
"""Emulating the Hunter archetype means accepting your place as a bulwark
|
||||||
|
between civilization and the terrors of the wilderness. As you walk the
|
||||||
|
Hunter’s path, you learn specialized techniques for fighting the threats
|
||||||
|
you face, from rampaging ogres and hordes of orcs to towering giants and
|
||||||
|
terrifying dragons.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Hunter"
|
name = "Hunter"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class BeastMaster(SubClass):
|
class BeastMaster(SubClass):
|
||||||
|
"""The Beast Master archetype embodies a friendship between the civilized
|
||||||
|
races and the beasts of the world. United in focus, beast and ranger work
|
||||||
|
as one to fight the monstrous foes that threaten civilization and the
|
||||||
|
wilderness alike. Emulating the Beast Master archetype means committing
|
||||||
|
yourself to this ideal, working in partnership with an animal as its
|
||||||
|
companion and friend.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Beast Master"
|
name = "Beast Master"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class GloomStalker(SubClass):
|
class GloomStalker(SubClass):
|
||||||
|
"""Gloom Stalkers are at home in the darkest places: deep under the earth, in
|
||||||
|
gloomy alleyways, in primeval forests, and wherever else the light
|
||||||
|
dims. Most folk enter such places with trepidation, but a Gloom Stalker
|
||||||
|
ventures boldly into the darkness, seeking to ambush threats before they
|
||||||
|
can reach the broader world. Such rangers are often found in the Underdark,
|
||||||
|
but they will go any place Where evil lurks in the shadows
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Gloom Stalker"
|
name = "Gloom Stalker"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class HorizonWalker(SubClass):
|
class HorizonWalker(SubClass):
|
||||||
|
"""Horizon Walkers guard the world against threats that originate from other
|
||||||
|
planes or that seek to ravage the mortal realm with otherworldly
|
||||||
|
magic. They seek out planar portals and keep watch over them, venturing to
|
||||||
|
the Inner Planes and the Outer Planes as needed to pursue their foes. These
|
||||||
|
rangers are also friends to any forces in the multiverse—especially
|
||||||
|
benevolent dragons, fey, and elementals—that work to preserve life and the
|
||||||
|
order of the planes
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Horizon Walker"
|
name = "Horizon Walker"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class MonsterSlayer(SubClass):
|
class MonsterSlayer(SubClass):
|
||||||
|
"""You have dedicated yourself to hunting down creatures of the night and
|
||||||
|
wielders of grim magic. A Monster Slayer seeks out vampires, dragons, evil
|
||||||
|
fey, fiends, and other magical threats. Trained in supernatural tech-
|
||||||
|
niques to overcome such monsters, Slayers are experts at unearthing and
|
||||||
|
defeating mighty, mystical foes.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Monster Slayer"
|
name = "Monster Slayer"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
@@ -80,16 +119,35 @@ class Ranger(CharClass):
|
|||||||
|
|
||||||
# Revised Ranger
|
# Revised Ranger
|
||||||
class BeastConclave(SubClass):
|
class BeastConclave(SubClass):
|
||||||
|
"""Many rangers are more at home in the wilds than in civilization, to the
|
||||||
|
point where animals consider them kin. Rangers of the Beast Conclave
|
||||||
|
develop a close bond with a beast, then further strengthen that bond
|
||||||
|
through the use of magic.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Beast Conclave"
|
name = "Beast Conclave"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class HunterConclave(SubClass):
|
class HunterConclave(SubClass):
|
||||||
|
"""Some rangers seek to master weapons to better protect civilization from the
|
||||||
|
terrors of the wilderness. Members of the Hunter Conclave learn specialized
|
||||||
|
fighting techniques for use against the most dire threats, from rampaging
|
||||||
|
ogres and hordes of orcs to towering giants and terrifying dragons
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Hunter Conclave"
|
name = "Hunter Conclave"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class DeepStalkerConclave(SubClass):
|
class DeepStalkerConclave(SubClass):
|
||||||
|
"""Most folk descend into the depths of the Underdark only under the most
|
||||||
|
pressing conditions, undertaking some desperate quest or following the
|
||||||
|
promise of vast riches. All too often, evil festers beneath the earth
|
||||||
|
unnoticed, and rangers of the Deep Stalker Conclave strive to uncover and
|
||||||
|
defeat such threats before they can reach the surface.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Deep Stalker Conclave"
|
name = "Deep Stalker Conclave"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -5,16 +5,37 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class Thief(SubClass):
|
class Thief(SubClass):
|
||||||
|
"""You hone your skills in the larcenous arts. Burglars, bandits, cutpurses,
|
||||||
|
and other criminals typically follow this archetype, but so do rogues who
|
||||||
|
prefer to think of themselves as professional treasure seekers, explorers,
|
||||||
|
delvers, and investigators. In addition to improving your agility and
|
||||||
|
stealth, you learn skills useful for delving into ancient ruins, reading
|
||||||
|
unfamiliar languages, and using magic items you normally couldn’t employ
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Thief"
|
name = "Thief"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Assassin(SubClass):
|
class Assassin(SubClass):
|
||||||
|
"""You focus your training on the grim art of death. Those who adhere to this
|
||||||
|
archetype are diverse: hired killers, spies, bounty hunters, and even
|
||||||
|
specially anointed priests trained to exterminate the enemies of their
|
||||||
|
deity. Stealth, poison, and disguise help you eliminate your foes with
|
||||||
|
deadly efficiency
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Assassin"
|
name = "Assassin"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class ArcaneTrickster(SubClass):
|
class ArcaneTrickster(SubClass):
|
||||||
|
"""Some rogues enhance their fine-honed skills of stealth and agility with
|
||||||
|
magic, learning tricks of enchantment and illusion. These rogues include
|
||||||
|
pickpockets and burglars, but also pranksters, mischief-makers, and a
|
||||||
|
significant number of adventurers.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Arcane Trickster"
|
name = "Arcane Trickster"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
spellcasting_ability = 'intelligence'
|
spellcasting_ability = 'intelligence'
|
||||||
@@ -45,16 +66,51 @@ class ArcaneTrickster(SubClass):
|
|||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class Inquisitive(SubClass):
|
class Inquisitive(SubClass):
|
||||||
|
"""As an archetypal Inquisitive, you excel at rooting out se- crets and
|
||||||
|
unraveling mysteries. You rely on your sharp eye for detail, but also on
|
||||||
|
your finely honed ability to read the words and deeds of other creatures to
|
||||||
|
deter- mine their true intent. You excel at defeating creatures that hide
|
||||||
|
among and prey upon ordinary folk, and your mastery of lore and your keen
|
||||||
|
deductions make you well equipped to expose and end hidden evils
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Inquisitive"
|
name = "Inquisitive"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Mastermind(SubClass):
|
class Mastermind(SubClass):
|
||||||
|
"""Your focus is on people and on the influence and secrets they have. Many
|
||||||
|
spies, courtiers, and schemers follow this archetype, leading lives of
|
||||||
|
intrigue. Words are your weapons as often as knives or poison, and secrets
|
||||||
|
and favors are some of your favorite treasures.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Mastermind"
|
name = "Mastermind"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
|
class Scout(SubClass):
|
||||||
|
"""You are skilled in stealth and surviving far from the streets of a city,
|
||||||
|
allowing you to scout ahead of your companions during expeditions. Rogues
|
||||||
|
who embrace this archetype are at home in the wilderness and among
|
||||||
|
barbarians and rangers, and many Scouts serve as the eyes and ears of war
|
||||||
|
bands. Ambusher, spy, bounty hunter#these are just a few of the roles that
|
||||||
|
Scouts as- sume as they range the world.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Scout"
|
||||||
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Swashbuckler(SubClass):
|
class Swashbuckler(SubClass):
|
||||||
|
"""You focus your training on the art of the blade, relying on speed,
|
||||||
|
elegance, and charm in equal parts. While some warriors are brutes clad in
|
||||||
|
heavy armor, your method of fighting looks almost like a performance. Du—
|
||||||
|
elists and pirates typically belong to this archetype. A Swashbuckler
|
||||||
|
excels in single combat, and can fight with two weapons while safely
|
||||||
|
darting away from an opponent
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Swashbuckler"
|
name = "Swashbuckler"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
@@ -75,4 +131,4 @@ class Rogue(CharClass):
|
|||||||
'Sleight of Hand', 'Stealth')
|
'Sleight of Hand', 'Stealth')
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
subclasses_available = (Thief, Assassin, ArcaneTrickster,
|
subclasses_available = (Thief, Assassin, ArcaneTrickster,
|
||||||
Inquisitive, Mastermind, Swashbuckler)
|
Inquisitive, Mastermind, Scout, Swashbuckler)
|
||||||
|
|||||||
@@ -5,27 +5,88 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class DraconicBloodline(SubClass):
|
class DraconicBloodline(SubClass):
|
||||||
|
"""Your innate magic comes from draconic magic that was mingled with your
|
||||||
|
blood or that of your ancestors. Most often, sorcerers with this origin
|
||||||
|
trace their descent back to a mighty sorcerer of ancient times who made a
|
||||||
|
bargain with a dragon or who might even have claimed a dragon parent. Some
|
||||||
|
of these bloodlines are well established in the world, but most are
|
||||||
|
obscure. Any given sorcerer could be the first of a new bloodline, as a
|
||||||
|
result of a pact or some other exceptional circumstance.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Draconic Bloodline"
|
name = "Draconic Bloodline"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class WildMagic(SubClass):
|
class WildMagic(SubClass):
|
||||||
|
"""Your innate magic comes from the wild forces of chaos that underlie the
|
||||||
|
order of creation. You might have endured exposure to some form o f raw
|
||||||
|
magic, perhaps through a planar portal leading to Limbo, the Elemental
|
||||||
|
Planes, or the mysterious Far Realm. Perhaps you were blessed by a powerful
|
||||||
|
fey creature or marked by a demon. Or your magic could be a fluke of your
|
||||||
|
birth, with no apparent cause or reason. However it came to be, this
|
||||||
|
chaotic magic churns within you, waiting for any outlet.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Wild Magic"
|
name = "Wild Magic"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class DivineSoul(SubClass):
|
class DivineSoul(SubClass):
|
||||||
|
"""Sometimes the spark of magic that fuels a sorcerer comes from a divine
|
||||||
|
source that glimmers within the soul. Having such a blessed soul is a sign
|
||||||
|
that your innate magic might come from a distant but powerful familial
|
||||||
|
connection to a divine being. Perhaps your ances— tor was an angel,
|
||||||
|
transformed into a mortal and sent to fight in a god’s name. Or your birth
|
||||||
|
might align with an ancient prophecy, marking you as a servant of the gods
|
||||||
|
or a chosen vessel of divine magic.
|
||||||
|
|
||||||
|
A Divine Soul, with a natural magnetism, is seen as a threat by some
|
||||||
|
religious hierarchies. As an outsider who commands sacred power, a Divine
|
||||||
|
Soul can undermine an existing order by claiming a direct tie to the
|
||||||
|
divine.
|
||||||
|
|
||||||
|
In some cultures, only those who can claim the power of a Divine Soul may
|
||||||
|
command religious power. In these lands, ecclesiastical positions are
|
||||||
|
dominated by a few bloodlines and preserved over generations
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Divine Soul"
|
name = "Divine Soul"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class ShadowMagic(SubClass):
|
class ShadowMagic(SubClass):
|
||||||
|
"""You are a creature of shadow, for your innate magic comes from the
|
||||||
|
Shadowfell itself. You might trace your lineage to an entity from that
|
||||||
|
place, or perhaps you were exposed to its fell energy and transformed by
|
||||||
|
it.
|
||||||
|
|
||||||
|
The power of shadow magic casts a strange pall over your physical
|
||||||
|
presence. The spark of life that sustains you is muffled, as if it
|
||||||
|
struggles to remain viable against the dark energy that imbues your
|
||||||
|
soul. At your option, you can pick from or roll on the Shadow Sorcerer
|
||||||
|
Quirks table to create a quirk for your character
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Shadow Magic"
|
name = "Shadow Magic"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class StormSorcery(SubClass):
|
class StormSorcery(SubClass):
|
||||||
|
"""Your innate magic comes from the power of elemental air. Many with this
|
||||||
|
power can trace their magic back to a near-death experience caused by the
|
||||||
|
Great Rain, but perhaps you were born during a howling gale so powerful
|
||||||
|
that folk still tell stories of it, or your lineage might include the
|
||||||
|
influence of potent air creatures such as djinn. Whatever the case, the
|
||||||
|
magic of the storm permeates your being.
|
||||||
|
|
||||||
|
Storm sorcerers are invaluable members of a ship’s crew. Their magic allows
|
||||||
|
them to exert control over wind and weather in their immediate area. Their
|
||||||
|
abilities also prove useful in repelling attacks by sahuagin, pirates,
|
||||||
|
and other waterborne threats.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Storm Sorcery"
|
name = "Storm Sorcery"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -5,33 +5,109 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class Archfey(SubClass):
|
class Archfey(SubClass):
|
||||||
|
"""Your patron is a lord or lady of the fey, a creature of legend who holds
|
||||||
|
secrets that were forgotten before the mortal races were born. This being’s
|
||||||
|
motivations are often inscrutable, and sometimes whimsical, and might
|
||||||
|
involve a striving for greater magical power or the settling of age-old
|
||||||
|
grudges. Beings of this sort include the Prince of Frost; the Queen of Air
|
||||||
|
and Darkness, ruler of the Gloaming Court; Titania of the Summer Court; her
|
||||||
|
consort Oberon, the Green Lord; Hyrsam, the Prince of Fools; and ancient
|
||||||
|
hags
|
||||||
|
|
||||||
|
"""
|
||||||
name = "The Archfey Patron"
|
name = "The Archfey Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Fiend(SubClass):
|
class Fiend(SubClass):
|
||||||
|
"""You have made a pact with a fiend from the lower planes o f existence, a
|
||||||
|
being whose aims are evil, even if you strive against those aims. Such
|
||||||
|
beings desire the corruption or destruction of all things, ultimately
|
||||||
|
including you. Fiends powerful enough to forge a pact include demon lords
|
||||||
|
such as Demogorgon, Orcus, Fraz’Urb-luu, and Baphomet; archdevils such as
|
||||||
|
Asmodeus, Dispater, Mephistopheles, and Belial; pit fiends and balors that
|
||||||
|
are especially mighty; and ultroloths and other lords of the yugoloths
|
||||||
|
|
||||||
|
"""
|
||||||
name = "The Fiend Patron"
|
name = "The Fiend Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class GreatOldOne(SubClass):
|
class GreatOldOne(SubClass):
|
||||||
|
"""Your patron is a mysterious entity whose nature is utterly foreign to the
|
||||||
|
fabric of reality. It might come from the Far Realm, the space beyond
|
||||||
|
reality, or it could be one of the elder gods known only in legends. Its
|
||||||
|
motives are incomprehensible to mortals, and its knowledge so immense and
|
||||||
|
ancient that even the greatest libraries pale in comparison to the vast
|
||||||
|
secrets it holds. The Great Old One might be unaware of your existence or
|
||||||
|
entirely indifferent to you, but the secrets you have learned allow you to
|
||||||
|
draw your magic from it.
|
||||||
|
|
||||||
|
Entities of this type include Ghaunadar, called That Which Lurks;
|
||||||
|
Tharizdun, the Chained God; Dendar, the Night Serpent; Zargon, the
|
||||||
|
Returner; Great Cthulhu; and other unfathomable beings.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "The Great Old One Patron"
|
name = "The Great Old One Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
class Undying(SubClass):
|
class Undying(SubClass):
|
||||||
|
"""Death holds no sway over your patron, who has un- locked the secrets of
|
||||||
|
everlasting life, although such a prize- like all power- comes at a
|
||||||
|
price. Once mortal, the Undying has seen mortal lifetimes pass like the
|
||||||
|
sea- sons, like the flicker of endless days and nights. It has the secrets
|
||||||
|
of the ages to share, secrets of life and death. Beings of this sort
|
||||||
|
include Vecna, Lord of the Hand and the Eye; the dread Iuz; the lich-queen
|
||||||
|
Vol; the Undying Court of Aerenal; Vlaakith, lich-queen of the githyanki;
|
||||||
|
and the deathless wizard Fistandantalus.
|
||||||
|
|
||||||
|
In the Realms, Undying patrons include Larloch the Shadow King, legendary
|
||||||
|
master of Warlock's Crypt, and Gilgeam, the God-King of Unther
|
||||||
|
|
||||||
|
"""
|
||||||
name = "The Undying Patron"
|
name = "The Undying Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class Celestial(SubClass):
|
class Celestial(SubClass):
|
||||||
|
"""Your patron is a powerful being of the Upper Planes. You have bound yourself
|
||||||
|
to an ancient empyrean, solar, ki-rin, unicorn, or other entity that
|
||||||
|
resides in the planes of everlasting bliss. Your pact with that being
|
||||||
|
allows you to experience the barest touch of the holy light that illu—
|
||||||
|
minates the multiverse.
|
||||||
|
|
||||||
|
Being connected to such power can cause changes in your behavior and
|
||||||
|
beliefs. You might find yourself driven to annihilate the undead, to defeat
|
||||||
|
fiends, and to protect the innocent. At times, your heart might also be
|
||||||
|
filled with a longing for the celestial realm of your patron, and a desire
|
||||||
|
to wander that paradise for the rest of your days. But you know that your
|
||||||
|
mission is among mortals for now, and that your pact binds you to bring
|
||||||
|
light to the dark places of the world.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "The Celestial Patron"
|
name = "The Celestial Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Hexblade(SubClass):
|
class Hexblade(SubClass):
|
||||||
|
"""You have made your pact with a mysterious entity from the Shadowfell—a force
|
||||||
|
that manifests in sentient magic weapons carved from the stuff of
|
||||||
|
shadow. The mighty sword Blackrazor is the most notable of these weapons,
|
||||||
|
which have been spread across the multiverse over the ages. The shadowy
|
||||||
|
force behind these weapons can offer power to warlocks who form pacts with
|
||||||
|
it. Many hexhlade warlocks create weapons that emulate those formed in the
|
||||||
|
Shadowfell. Others forgo such arms, content to weave the dark magic of that
|
||||||
|
plane into their spellcasting.
|
||||||
|
|
||||||
|
Because the Raven Queen is known to have forged the first of these weapons,
|
||||||
|
many sages speculate that she and the force are one and that the weapons,
|
||||||
|
along with hexblade warlocks, are tools she uses to manipulate events on
|
||||||
|
the Material Plane to her inscrutable ends
|
||||||
|
|
||||||
|
"""
|
||||||
name = "Hexblade Patron"
|
name = "Hexblade Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -5,53 +5,153 @@ from collections import defaultdict
|
|||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
class Abjuration(SubClass):
|
class Abjuration(SubClass):
|
||||||
|
"""The School of Abjuration emphasizes magic that blocks, banishes, or
|
||||||
|
protects. Detractors of this school say that its tradition is about denial,
|
||||||
|
negation rather than positive assertion. You understand, however, that
|
||||||
|
ending harmful effects, protecting the weak, and banishing evil influences
|
||||||
|
is anything but a philosophical void. It is a proud and respected vocation.
|
||||||
|
|
||||||
|
Called abjurers, members of this school are sought when baleful spirits
|
||||||
|
require exorcism, when important locations must be guarded against magical
|
||||||
|
spying, and when portals to other planes of existence must be closed.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Abjuration"
|
name = "School of Abjuration"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Conjuration(SubClass):
|
class Conjuration(SubClass):
|
||||||
|
"""As a conjurer, you favor spells that produce objects and creatures out o f
|
||||||
|
thin air. You can conjure billowing clouds of killing fog or summon
|
||||||
|
creatures from elsewhere to fight on your behalf. As your mastery grows,
|
||||||
|
you learn spells of transportation and can teleport yourself across vast
|
||||||
|
distances, even to other planes of existence, in an instant
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Conjuration"
|
name = "School of Conjuration"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Divination(SubClass):
|
class Divination(SubClass):
|
||||||
|
"""The counsel of a diviner is sought by royalty and commoners alike, for all
|
||||||
|
seek a clearer understanding of the past, present, and future. As a
|
||||||
|
diviner, you strive to part the veils of space, time, and consciousness so
|
||||||
|
that you can see clearly. You work to master spells of discernment, remote
|
||||||
|
viewing, supernatural knowledge, and foresight.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Divination"
|
name = "School of Divination"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Enchantment(SubClass):
|
class Enchantment(SubClass):
|
||||||
|
"""As a member of the School of Enchantment, you have honed your ability to
|
||||||
|
magically entrance and beguile other people and monsters. Some enchanters
|
||||||
|
are peacemakers who bewitch the violent to lay down their arms and charm
|
||||||
|
the cruel into showing mercy. Others are tyrants who magically bind the
|
||||||
|
unwilling into their service. Most enchanters fall somewhere in between.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Enchantment"
|
name = "School of Enchantment"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Evocation(SubClass):
|
class Evocation(SubClass):
|
||||||
|
"""You focus your study on magic that creates powerful elemental effects such
|
||||||
|
as bitter cold, searing flame, rolling thunder, crackling lightning, and
|
||||||
|
burning acid. Some evokers find employment in military forces, serving as
|
||||||
|
artillery to blast enemy armies from afar. Others use their spectacular
|
||||||
|
power to protect the weak, while some seek their own gain as bandits,
|
||||||
|
adventurers, or aspiring tyrants.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Evocation"
|
name = "School of Evocation"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Illusion(SubClass):
|
class Illusion(SubClass):
|
||||||
|
"""You focus your studies on magic that dazzles the senses, befuddles the
|
||||||
|
mind, and tricks even the wisest folk. Your magic is subtle, but the
|
||||||
|
illusions crafted by your keen mind make the impossible seem real. Some
|
||||||
|
illusionists—including many gnome w izards—are benign tricksters who use
|
||||||
|
their spells to entertain. Others are more sinister masters of deception,
|
||||||
|
using their illusions to frighten and fool others for their personal gain.
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Illusion"
|
name = "School of Illusion"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Necromancy(SubClass):
|
class Necromancy(SubClass):
|
||||||
|
"""The School of Necromancy explores the cosm ic forces of life, death, and
|
||||||
|
undeath. As you focus your studies in this tradition, you learn to
|
||||||
|
manipulate the energy that animates all living things. As you progress, you
|
||||||
|
learn to sap the life force from a creature as your magic destroys its
|
||||||
|
body, transforming that vital energy into magical power you can manipulate.
|
||||||
|
|
||||||
|
Most people see necromancers as menacing, or even villainous, due to the
|
||||||
|
close association with death. Not all necromancers are evil, but the forces
|
||||||
|
they manipulate are considered taboo by many societies
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Necromancy"
|
name = "School of Necromancy"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
class Transmutation(SubClass):
|
class Transmutation(SubClass):
|
||||||
|
"""You are a student of spells that modify energy and matter. To you, the
|
||||||
|
world is not a fixed thing, but eminently mutable, and you delight in being
|
||||||
|
an agent of change. You wield the raw stuff of creation and learn to alter
|
||||||
|
both physical forms and mental qualities. Your magic gives you the tools to
|
||||||
|
become a smith on reality’s forge.
|
||||||
|
|
||||||
|
Some transmuters are tinkerers and pranksters, turning people into toads
|
||||||
|
and transforming copper into silver for fun and occasional profit. Others
|
||||||
|
pursue their magical studies with deadly seriousness, seeking the power of
|
||||||
|
the gods to make and destroy worlds
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Transmutation"
|
name = "School of Transmutation"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
class Bladeslinging(SubClass):
|
class Bladeslinging(SubClass):
|
||||||
|
"""**Restriction: Elves Only**
|
||||||
|
|
||||||
|
Bladesingers are elves who bravely defend their people and lands. They are
|
||||||
|
elf wizards who master a school of sword fighting grounded in a tradition
|
||||||
|
of arcane magic. In combat, a bladesinger uses a series of intricate,
|
||||||
|
elegant maneuvers that fend off harm and allow the bladesinger to channel
|
||||||
|
magic into devastating attacks and a cunning defense
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of Bladeslinging"
|
name = "School of Bladeslinging"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
class WarMagic(SubClass):
|
class WarMagic(SubClass):
|
||||||
|
"""A variety of arcane colleges specialize in training wiz— ards for war. The
|
||||||
|
tradition of War Magic blends principles of evocation and abjuration,
|
||||||
|
rather than specializing in either of those schools. It teaches
|
||||||
|
techniques that empower a caster’s spells, while also providing methods for
|
||||||
|
wizards to bolster their own defenses.
|
||||||
|
|
||||||
|
Followers of this tradition are known as war mages. They see their magic
|
||||||
|
as both a weapon and armor, a resource superior to any piece of steel. War
|
||||||
|
mages act fast in battle, using their spells to seize tactical control of a
|
||||||
|
situation. Their spells strike hard, while their defensive skills foil
|
||||||
|
their opponents“ attempts to counterattack. War mages are also adept at
|
||||||
|
turning other spellcasters’ magical energy against them.
|
||||||
|
|
||||||
|
In great battles, a war mage often works with evokers, abjurers, and other
|
||||||
|
types of wizards. Evokers, in particular, sometimes tease war mages for
|
||||||
|
splitting their attention between offense and defense. A war mage’s typical
|
||||||
|
response: “What good is being able to throw a mighty fireball if I die
|
||||||
|
before I can cast it?
|
||||||
|
|
||||||
|
"""
|
||||||
name = "School of War Magic"
|
name = "School of War Magic"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ class App(npyscreen.NPSAppManaged):
|
|||||||
def save_character(self):
|
def save_character(self):
|
||||||
# Save the file
|
# Save the file
|
||||||
filename = self.getForm("SAVE").filename.value
|
filename = self.getForm("SAVE").filename.value
|
||||||
self.character.save(filename, template_file='empty_template.tex')
|
self.character.save(filename, template_file='empty_template.txt')
|
||||||
# Create the PDF character sheet
|
# Create the PDF character sheet
|
||||||
if self.getForm('SAVE').make_pdf.value:
|
if self.getForm('SAVE').make_pdf.value:
|
||||||
log.debug("Creating PDF")
|
log.debug("Creating PDF")
|
||||||
self.character.to_pdf(filename, template_file='empty_template.tex')
|
self.character.to_pdf(filename, template_file='empty_template.txt')
|
||||||
subprocess.call(['makesheets', filename])
|
subprocess.call(['makesheets', filename])
|
||||||
|
|
||||||
def update_max_hp(self):
|
def update_max_hp(self):
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ class CitySecrets(Feature):
|
|||||||
|
|
||||||
# Swords Coast Adventurer's Guide
|
# Swords Coast Adventurer's Guide
|
||||||
class AllEyesOnYou(Feature):
|
class AllEyesOnYou(Feature):
|
||||||
"""Your accent, mannerisms, figures of speech, and per- haps even your
|
"""Your accent, mannerisms, figures of speech, and perhaps even your
|
||||||
appearance all mark you as foreign. Curious glances are directed your way
|
appearance all mark you as foreign. Curious glances are directed your way
|
||||||
wherever you go, which can be a nuisance, but you also gain the friendly
|
wherever you go, which can be a nuisance, but you also gain the friendly
|
||||||
interest of scholars and others intrigued by far-off lands, to say nothing
|
interest of scholars and others intrigued by far-off lands, to say nothing
|
||||||
@@ -224,7 +224,7 @@ class EarToTheGround(Feature):
|
|||||||
|
|
||||||
class WatchersEye(Feature):
|
class WatchersEye(Feature):
|
||||||
"""Your experience in enforcing the law, and dealing with lawbreakers, gives
|
"""Your experience in enforcing the law, and dealing with lawbreakers, gives
|
||||||
you a feel for local laws and crimi- nals. You can easily find the local
|
you a feel for local laws and criminals. You can easily find the local
|
||||||
outpost of the watch or a simila r organization, and just as easily pick
|
outpost of the watch or a simila r organization, and just as easily pick
|
||||||
out the dens of criminal activity in a community, although you're more
|
out the dens of criminal activity in a community, although you're more
|
||||||
likely to be welcome in the former locations rather than the latter.
|
likely to be welcome in the former locations rather than the latter.
|
||||||
@@ -237,9 +237,9 @@ class WatchersEye(Feature):
|
|||||||
class RespectOfTheStoutFolk(Feature):
|
class RespectOfTheStoutFolk(Feature):
|
||||||
"""As well respected as clan crafters are among outsiders, no one esteems them
|
"""As well respected as clan crafters are among outsiders, no one esteems them
|
||||||
quite so highly as dwarves do. You always have free room and board in any
|
quite so highly as dwarves do. You always have free room and board in any
|
||||||
place where shield dwarves or gold dwarves dwell, and the individu- als in
|
place where shield dwarves or gold dwarves dwell, and the individuals in
|
||||||
such a settlement might vie among themselves to determine who can offer you
|
such a settlement might vie among themselves to determine who can offer you
|
||||||
(and possibly your compa- triots) the finest accommodations and assistance.
|
(and possibly your compatriots) the finest accommodations and assistance.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Respect of the Stout Folk"
|
name = "Respect of the Stout Folk"
|
||||||
@@ -257,7 +257,7 @@ class LibraryAccess(Feature):
|
|||||||
and you know how to navigate those connections with some ease.
|
and you know how to navigate those connections with some ease.
|
||||||
|
|
||||||
Additionally, you are likely to gain preferential treatment at other
|
Additionally, you are likely to gain preferential treatment at other
|
||||||
libraries across the Realms, as profes- sional courtesy shown to a fellow
|
libraries across the Realms, as professional courtesy shown to a fellow
|
||||||
scholar.
|
scholar.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -267,7 +267,7 @@ class LibraryAccess(Feature):
|
|||||||
|
|
||||||
class CourtFunctionary(Feature):
|
class CourtFunctionary(Feature):
|
||||||
"""Your knowledge of how bureaucracies function lets you gain access to the
|
"""Your knowledge of how bureaucracies function lets you gain access to the
|
||||||
records and inner workings of any no- ble court or government you
|
records and inner workings of any noble court or government you
|
||||||
encounter. You know who the movers and shakers are, whom to go to for the
|
encounter. You know who the movers and shakers are, whom to go to for the
|
||||||
favors you seek, and what the current intrigues of interest in the group
|
favors you seek, and what the current intrigues of interest in the group
|
||||||
are.
|
are.
|
||||||
@@ -279,10 +279,10 @@ class CourtFunctionary(Feature):
|
|||||||
|
|
||||||
class SafeHaven(Feature):
|
class SafeHaven(Feature):
|
||||||
"""As a faction agent, you have access to a secret network of supporters and
|
"""As a faction agent, you have access to a secret network of supporters and
|
||||||
operatives who can provide assis- tance on your adventures. You know a set
|
operatives who can provide assistance on your adventures. You know a set
|
||||||
of secret signs and passwords you can use to identify such operatives , who
|
of secret signs and passwords you can use to identify such operatives , who
|
||||||
can provide you with access to a hidden safe house, free room and board, or
|
can provide you with access to a hidden safe house, free room and board, or
|
||||||
assistance in finding informa- tion. These agents never risk their lives
|
assistance in finding information. These agents never risk their lives
|
||||||
for you or risk revealing their true identities.
|
for you or risk revealing their true identities.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -321,7 +321,7 @@ class KnightlyRegard(Feature):
|
|||||||
"""You receive shelter and succor from members of your knightly order and those
|
"""You receive shelter and succor from members of your knightly order and those
|
||||||
who are sympathetic to its aims. If your order is a religious one, you can
|
who are sympathetic to its aims. If your order is a religious one, you can
|
||||||
gain aid from temples and other religious communities of your
|
gain aid from temples and other religious communities of your
|
||||||
deity. Knights of civic orders can get help from the com- munity- whether a
|
deity. Knights of civic orders can get help from the community- whether a
|
||||||
lone settlement or a great nation- that they serve, and knights of
|
lone settlement or a great nation- that they serve, and knights of
|
||||||
philosophical orders can find help from those they have aided in pursuit of
|
philosophical orders can find help from those they have aided in pursuit of
|
||||||
their ideals , and those who share those ideals.
|
their ideals , and those who share those ideals.
|
||||||
@@ -329,7 +329,7 @@ class KnightlyRegard(Feature):
|
|||||||
This help comes in the form of shelter and meals, and healing when
|
This help comes in the form of shelter and meals, and healing when
|
||||||
appropriate, as well as occasionally risky assistance, such as a band of
|
appropriate, as well as occasionally risky assistance, such as a band of
|
||||||
local citizens rallying to aid a sorely pressed knight in a fight , or
|
local citizens rallying to aid a sorely pressed knight in a fight , or
|
||||||
those who sup- port the order helping to smuggle a knight out of town when
|
those who support the order helping to smuggle a knight out of town when
|
||||||
he or she is being hunted unjustly.
|
he or she is being hunted unjustly.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -343,7 +343,7 @@ class MercenaryLife(Feature):
|
|||||||
little about any such company, including the names and reputations of its
|
little about any such company, including the names and reputations of its
|
||||||
commanders and leaders, and who has hired them recently. You can find the
|
commanders and leaders, and who has hired them recently. You can find the
|
||||||
taverns and festhalls where mercenaries abide in any area, as long as you
|
taverns and festhalls where mercenaries abide in any area, as long as you
|
||||||
speak the language. You can find mercenary work between adven- tures
|
speak the language. You can find mercenary work between adventures
|
||||||
sufficient to maintain a comfortable lifestyle (see "Practicing a
|
sufficient to maintain a comfortable lifestyle (see "Practicing a
|
||||||
Profession" under "Downtime Activities" in chapter 8 of the Player's
|
Profession" under "Downtime Activities" in chapter 8 of the Player's
|
||||||
Handbook).
|
Handbook).
|
||||||
@@ -376,7 +376,7 @@ class KeptInStyle(Feature):
|
|||||||
cord your debt and send an accounting to your family's estate in Waterdeep
|
cord your debt and send an accounting to your family's estate in Waterdeep
|
||||||
to settle what you owe.
|
to settle what you owe.
|
||||||
|
|
||||||
This advantage enables you to live a comfortable life- style without having
|
This advantage enables you to live a comfortable lifestyle without having
|
||||||
to pay 2 gp a day for it, or reduces the cost of a wealthy or aristocratic
|
to pay 2 gp a day for it, or reduces the cost of a wealthy or aristocratic
|
||||||
lifestyle by that amount. You may not maintain a less affluent lifestyle
|
lifestyle by that amount. You may not maintain a less affluent lifestyle
|
||||||
and use the difference as income-the benefit is a line of credit, not an
|
and use the difference as income-the benefit is a line of credit, not an
|
||||||
|
|||||||
@@ -83,3 +83,17 @@ class Feature():
|
|||||||
return -100
|
return -100
|
||||||
|
|
||||||
|
|
||||||
|
class FeatureSelector(Feature):
|
||||||
|
"""
|
||||||
|
A feature with multiple possible choices.
|
||||||
|
"""
|
||||||
|
options = dict()
|
||||||
|
|
||||||
|
def __init__(self, selection=None):
|
||||||
|
keep_source = self.source
|
||||||
|
# Transform into selected feature
|
||||||
|
if selection.lower() in self.options():
|
||||||
|
new_feat = self.options[selection.lower()]
|
||||||
|
self.__dict__.update(new_feat.__dict__)
|
||||||
|
new_feat.__init__(self)
|
||||||
|
self.source = keep_source
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ class RadiantSoul(Feature):
|
|||||||
|
|
||||||
Your transformation lasts for 1 minute or until you end it as a bonus
|
Your transformation lasts for 1 minute or until you end it as a bonus
|
||||||
action. During it, you have a flying speed of 30 feet, and once on each of
|
action. During it, you have a flying speed of 30 feet, and once on each of
|
||||||
your turns, you can deal ex- tra radiant damage to one target when you deal
|
your turns, you can deal extra radiant damage to one target when you deal
|
||||||
damage to it with an attack or a spell. The extra radiant damage equals
|
damage to it with an attack or a spell. The extra radiant damage equals
|
||||||
your level.
|
your level.
|
||||||
|
|
||||||
@@ -409,13 +409,13 @@ class RadiantSoul(Feature):
|
|||||||
|
|
||||||
class RadiantConsumption(Feature):
|
class RadiantConsumption(Feature):
|
||||||
"""Starting at 3rd level, you can use your action to unleash the divine energy
|
"""Starting at 3rd level, you can use your action to unleash the divine energy
|
||||||
within your- self, causing a searing light to radiate from you, pour out of
|
within yourself, causing a searing light to radiate from you, pour out of
|
||||||
your eyes and mouth, and threaten to char you.
|
your eyes and mouth, and threaten to char you.
|
||||||
|
|
||||||
Your transformation lasts for 1 minute or until you end ii as a bonus
|
Your transformation lasts for 1 minute or until you end ii as a bonus
|
||||||
action. During it, you shed bright light in a 10-foot radius and dim light
|
action. During it, you shed bright light in a 10-foot radius and dim light
|
||||||
for an additional 10 feet,and at the end of each of your turns, you and
|
for an additional 10 feet,and at the end of each of your turns, you and
|
||||||
each crea- ture within 10 feet of you take radiant damage equal to half
|
each creature within 10 feet of you take radiant damage equal to half
|
||||||
your level (rounded up). In addition, once on each of your turns, you can
|
your level (rounded up). In addition, once on each of your turns, you can
|
||||||
deal extra radiant damage to one target when you deal damage to it with an
|
deal extra radiant damage to one target when you deal damage to it with an
|
||||||
attack or a spell. The extra radiant damage equals your level.
|
attack or a spell. The extra radiant damage equals your level.
|
||||||
@@ -489,7 +489,7 @@ class SpeechOfBeastAndLeaf(Feature):
|
|||||||
|
|
||||||
# Goliath
|
# Goliath
|
||||||
class StonesEndurance(Feature):
|
class StonesEndurance(Feature):
|
||||||
"""You can focus yourself to occa- sionally shrug off injury. When you take
|
"""You can focus yourself to occasionally shrug off injury. When you take
|
||||||
damage, you can use your reaction to roll a dl2. Add your Constitution
|
damage, you can use your reaction to roll a dl2. Add your Constitution
|
||||||
modifier to the number rolled, and reduce the damage by that total. After
|
modifier to the number rolled, and reduce the damage by that total. After
|
||||||
you use this trait, you can't use it again until you finish a short or long
|
you use this trait, you can't use it again until you finish a short or long
|
||||||
@@ -614,7 +614,7 @@ class ControlAirAndWater(Feature):
|
|||||||
|
|
||||||
|
|
||||||
class EmissaryOfTheSea(Feature):
|
class EmissaryOfTheSea(Feature):
|
||||||
"""Aquatic beasts have an extraor- dinary affinity with your people. You can
|
"""Aquatic beasts have an extraordinary affinity with your people. You can
|
||||||
communicate simple ideas with beasts that can breathe water. They can
|
communicate simple ideas with beasts that can breathe water. They can
|
||||||
understand the meaning of your words, though you have no special ability to
|
understand the meaning of your words, though you have no special ability to
|
||||||
understand them in return.
|
understand them in return.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from .features import Feature
|
from .features import Feature, FeatureSelector
|
||||||
from .. import (weapons, armor)
|
from .. import (weapons, armor)
|
||||||
|
|
||||||
|
|
||||||
@@ -16,22 +16,6 @@ def select_ranger_fighting_style(feature_choices=[]):
|
|||||||
return RangerFightingStyle()
|
return RangerFightingStyle()
|
||||||
|
|
||||||
|
|
||||||
class RangerFightingStyle(Feature):
|
|
||||||
"""
|
|
||||||
Select a Fighting Style by choosing in feature_choices:
|
|
||||||
|
|
||||||
archery
|
|
||||||
|
|
||||||
defense
|
|
||||||
|
|
||||||
dueling
|
|
||||||
|
|
||||||
two-weapon fighting
|
|
||||||
"""
|
|
||||||
name = "Fighting Style (Select One)"
|
|
||||||
source = "Ranger"
|
|
||||||
|
|
||||||
|
|
||||||
class Archery(Feature):
|
class Archery(Feature):
|
||||||
"""
|
"""
|
||||||
You gain a +2 bonus to attack rolls you make
|
You gain a +2 bonus to attack rolls you make
|
||||||
@@ -84,3 +68,25 @@ class TwoWeaponFighting(Feature):
|
|||||||
name = "Fighting Style (Two-Weapon Fighting)"
|
name = "Fighting Style (Two-Weapon Fighting)"
|
||||||
source = "Ranger"
|
source = "Ranger"
|
||||||
needs_implementation = True
|
needs_implementation = True
|
||||||
|
|
||||||
|
|
||||||
|
class RangerFightingStyle(FeatureSelector):
|
||||||
|
"""
|
||||||
|
Select a Fighting Style by choosing in feature_choices:
|
||||||
|
|
||||||
|
archery
|
||||||
|
|
||||||
|
defense
|
||||||
|
|
||||||
|
dueling
|
||||||
|
|
||||||
|
two-weapon fighting
|
||||||
|
"""
|
||||||
|
options = {'archery': Archery,
|
||||||
|
'defense': Defense,
|
||||||
|
'dueling': Dueling,
|
||||||
|
'two-weapon fighting': TwoWeaponFighting,
|
||||||
|
'two-weapon': TwoWeaponFighting,
|
||||||
|
'dual wield': TwoWeaponFighting}
|
||||||
|
name = "Fighting Style (Select One)"
|
||||||
|
source = "Ranger"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
[% for sc in character.subclasses if sc not in ['', None, 'None', 'none']%]
|
[% for sc in character.subclasses if sc not in ['', None, 'None', 'none']%]
|
||||||
|
|
||||||
\section**{[[ sc.name ]]}
|
\section*{[[ sc.name ]]}
|
||||||
|
|
||||||
[[ sc.__doc__|rst_to_latex ]]
|
[[ sc.__doc__|rst_to_latex ]]
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ def rst_to_latex(rst):
|
|||||||
|
|
||||||
|
|
||||||
jinja_env = Environment(
|
jinja_env = Environment(
|
||||||
loader=PackageLoader('dungeonsheets', ''),
|
loader=PackageLoader('dungeonsheets', 'forms'),
|
||||||
block_start_string='[%',
|
block_start_string='[%',
|
||||||
block_end_string='%]',
|
block_end_string='%]',
|
||||||
variable_start_string='[[',
|
variable_start_string='[[',
|
||||||
@@ -183,7 +183,7 @@ def create_spells_pdf(char, basename, flatten=False):
|
|||||||
# for field in field_names:
|
# for field in field_names:
|
||||||
# fields.append((field, field))
|
# fields.append((field, field))
|
||||||
# Make the actual pdf
|
# Make the actual pdf
|
||||||
dirname = os.path.dirname(os.path.abspath(__file__))
|
dirname = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'forms/')
|
||||||
src_pdf = os.path.join(dirname, 'blank-spell-sheet-default.pdf')
|
src_pdf = os.path.join(dirname, 'blank-spell-sheet-default.pdf')
|
||||||
make_pdf(fields, src_pdf=src_pdf, basename=basename, flatten=flatten)
|
make_pdf(fields, src_pdf=src_pdf, basename=basename, flatten=flatten)
|
||||||
|
|
||||||
@@ -318,7 +318,7 @@ def create_character_pdf(char, basename, flatten=False):
|
|||||||
prof_text += "\n\nLanguages:\n" + text_box(char.languages)
|
prof_text += "\n\nLanguages:\n" + text_box(char.languages)
|
||||||
fields['ProficienciesLang'] = prof_text
|
fields['ProficienciesLang'] = prof_text
|
||||||
# Prepare the actual PDF
|
# Prepare the actual PDF
|
||||||
dirname = os.path.dirname(os.path.abspath(__file__))
|
dirname = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'forms/')
|
||||||
src_pdf = os.path.join(dirname, 'blank-character-sheet-default.pdf')
|
src_pdf = os.path.join(dirname, 'blank-character-sheet-default.pdf')
|
||||||
return make_pdf(fields, src_pdf=src_pdf, basename=basename,
|
return make_pdf(fields, src_pdf=src_pdf, basename=basename,
|
||||||
flatten=flatten)
|
flatten=flatten)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -1,109 +0,0 @@
|
|||||||
dungeonsheets_version = "0.4.2"
|
|
||||||
|
|
||||||
# Basic information
|
|
||||||
name = 'Inara Serradon'
|
|
||||||
# classes_levels: specify class and level or, if multiclass, specify as list
|
|
||||||
# example:
|
|
||||||
# classes_levels = ['wizard 3'] # 3rd level wizard
|
|
||||||
# subclasses = [None]
|
|
||||||
# also accepted, as long as only one class
|
|
||||||
# classes_levels = 'fighter 2'
|
|
||||||
# subclasses = None
|
|
||||||
# multiclass example
|
|
||||||
classes_levels = ['wizard 3', 'fighter 1', 'rogue 1'] # 5th level total
|
|
||||||
subclasses = ['Necromancer', None, None]
|
|
||||||
player_name = 'Mark'
|
|
||||||
background = "Acolyte"
|
|
||||||
race = "High-Elf"
|
|
||||||
# level = 3 # no longer used
|
|
||||||
alignment = "Chaotic good"
|
|
||||||
xp = 2190
|
|
||||||
hp_max = 16
|
|
||||||
|
|
||||||
# Ability Scores
|
|
||||||
strength = 10
|
|
||||||
dexterity = 15
|
|
||||||
constitution = 14
|
|
||||||
intelligence = 16
|
|
||||||
wisdom = 12
|
|
||||||
charisma = 8
|
|
||||||
|
|
||||||
# Proficiencies and languages
|
|
||||||
skill_proficiencies = [
|
|
||||||
'arcana',
|
|
||||||
'insight',
|
|
||||||
'investigation',
|
|
||||||
'perception',
|
|
||||||
'religion',
|
|
||||||
]
|
|
||||||
languages = "Common, Elvish, Draconic, Dwarvish, Goblin."
|
|
||||||
|
|
||||||
# Inventory
|
|
||||||
cp = 316
|
|
||||||
sp = 283
|
|
||||||
ep = 28
|
|
||||||
gp = 125
|
|
||||||
pp = 0
|
|
||||||
weapons = ('greatsword', 'longsword')
|
|
||||||
equipment = (
|
|
||||||
"""Gallon of ale, red cloak, shortsword, longsword, jar of salt, vodka
|
|
||||||
(500mL), potion of vitality, wand of magic missiles (7/7),
|
|
||||||
component pouch, spellbook, backpack, bottle of ink, ink pen, 10
|
|
||||||
sheets of parchment, small knife, tome of historical lore, holy
|
|
||||||
symbol, prayer book, set of common clothes, pouch.""")
|
|
||||||
|
|
||||||
# List of known spells
|
|
||||||
spells = ('blindness deafness', 'burning hands', 'detect magic',
|
|
||||||
'false life', 'mage armor', 'mage hand', 'magic missile',
|
|
||||||
'prestidigitation', 'ray of frost', 'ray of sickness', 'shield',
|
|
||||||
'shocking grasp', 'sleep',)
|
|
||||||
# Which spells have been prepared (not including cantrips)
|
|
||||||
spells_prepared = ('blindness deafness', 'false life', 'mage armor',
|
|
||||||
'ray of sickness', 'shield', 'sleep',)
|
|
||||||
|
|
||||||
# Backstory
|
|
||||||
personality_traits = """I use polysyllabic words that convey the impression of
|
|
||||||
erudition. Also, I’ve spent so long in the temple that I have little
|
|
||||||
experience dealing with people on a casual basis."""
|
|
||||||
|
|
||||||
ideals = """Knowledge. The path to power and self-improvement is through
|
|
||||||
knowledge."""
|
|
||||||
|
|
||||||
bonds = """The tome I carry with me is the record of my life’s work so far,
|
|
||||||
and no vault is secure enough to keep it safe."""
|
|
||||||
|
|
||||||
flaws = """I’ll do just about anything to uncover historical secrets that
|
|
||||||
would add to my research."""
|
|
||||||
|
|
||||||
features_and_traits = (
|
|
||||||
"""Spellcasting Ability: Intelligence is your spellcasting ability for
|
|
||||||
your spells. The saving throw DC to resist a spell you cast is
|
|
||||||
13. Your attack bonus when you make an attack with a spell is
|
|
||||||
+5. See the rulebook for rules on casting your spells.
|
|
||||||
|
|
||||||
Arcane Recovery: You can regain some of your magical energy by
|
|
||||||
studying your spellbook. Once per day during a short rest, you can
|
|
||||||
choose to recover expended spell slots with a combined level equal
|
|
||||||
to or less than half your wizard level (rounded up).
|
|
||||||
|
|
||||||
Darkvision: You see in dim light within a 60-foot radius of you as
|
|
||||||
if it were bright light, and in darkness in that radius as if it
|
|
||||||
were dim light. You can’t discern color in darkness, only shades
|
|
||||||
of gray.
|
|
||||||
|
|
||||||
Fey Ancestry: You have advantage on saving throws against being
|
|
||||||
charmed, and magic can’t put you to sleep.
|
|
||||||
|
|
||||||
Trance: Elves don’t need to sleep. They meditate deeply, remaining
|
|
||||||
semiconscious, for 4 hours a day and gain the same benefit a human
|
|
||||||
does from 8 hours of sleep.
|
|
||||||
|
|
||||||
Shelter of the Faithful: As a servant of Oghma, you command the
|
|
||||||
respect of those who share your faith, and you can perform the
|
|
||||||
rites of Oghma. You and your companions can expect to receive free
|
|
||||||
healing and care at a temple, shrine, or other established
|
|
||||||
presence of Oghma’s faith. Those who share your religion will
|
|
||||||
support you (and only you) at a modest lifestyle. You also have
|
|
||||||
ties to the temple of Oghma in Neverwinter, where you have a
|
|
||||||
residence. When you are in Neverwinter, you can call upon the
|
|
||||||
priests there for assistance that won’t endanger them.""")
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -20,12 +20,8 @@ setup(name='dungeonsheets',
|
|||||||
download_url = 'https://github.com/canismarko/dungeon-sheets/archive/master.zip',
|
download_url = 'https://github.com/canismarko/dungeon-sheets/archive/master.zip',
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
package_data={
|
package_data={
|
||||||
'dungeonsheets': ['blank-character-sheet-default.pdf',
|
'dungeonsheets': ['forms/*pdf', 'forms/*.tex', 'forms/*.txt',
|
||||||
'blank-spell-sheet-default.pdf',
|
'../VERSION']
|
||||||
'spellbook_template.tex', '../VERSION',
|
|
||||||
'empty_template.txt',
|
|
||||||
'character_template.txt', 'features_template.tex',
|
|
||||||
'druid_shapes_template.tex']
|
|
||||||
},
|
},
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'fdfgen', 'npyscreen', 'jinja2', 'pdfrw',
|
'fdfgen', 'npyscreen', 'jinja2', 'pdfrw',
|
||||||
|
|||||||
Reference in New Issue
Block a user