mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-24 06:38:28 +02:00
261 lines
9.7 KiB
Python
261 lines
9.7 KiB
Python
from collections import defaultdict
|
|
|
|
from dungeonsheets import features, weapons
|
|
from dungeonsheets.classes.classes import CharClass, SubClass
|
|
|
|
|
|
# PHB
|
|
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"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.FastHands, features.SecondStoryWork]
|
|
features_by_level[9] = [features.SupremeSneak]
|
|
features_by_level[13] = [features.UseMagicDevice]
|
|
features_by_level[17] = [features.ThiefsReflexes]
|
|
|
|
|
|
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"
|
|
_proficiencies_text = ("disguise kit", "poisoner's kit")
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.Assassinate]
|
|
features_by_level[9] = [features.InfiltrationExpertise]
|
|
features_by_level[13] = [features.Imposter]
|
|
features_by_level[17] = [features.DeathStrike]
|
|
|
|
|
|
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"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.MageHandLegerdemain]
|
|
features_by_level[9] = [features.MagicalAmbush]
|
|
features_by_level[13] = [features.VersatileTrickster]
|
|
features_by_level[17] = [features.SpellThief]
|
|
spellcasting_ability = "intelligence"
|
|
multiclass_spellslots_by_level = {
|
|
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
|
|
1: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
2: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
3: (3, 2, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
4: (3, 3, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
5: (3, 3, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
6: (3, 3, 0, 0, 0, 0, 0, 0, 0, 0),
|
|
7: (3, 4, 2, 0, 0, 0, 0, 0, 0, 0),
|
|
8: (3, 4, 2, 0, 0, 0, 0, 0, 0, 0),
|
|
9: (3, 4, 2, 0, 0, 0, 0, 0, 0, 0),
|
|
10: (4, 4, 3, 0, 0, 0, 0, 0, 0, 0),
|
|
11: (4, 4, 3, 0, 0, 0, 0, 0, 0, 0),
|
|
12: (4, 4, 3, 0, 0, 0, 0, 0, 0, 0),
|
|
13: (4, 4, 3, 2, 0, 0, 0, 0, 0, 0),
|
|
14: (4, 4, 3, 2, 0, 0, 0, 0, 0, 0),
|
|
15: (4, 4, 3, 2, 0, 0, 0, 0, 0, 0),
|
|
16: (4, 4, 3, 3, 0, 0, 0, 0, 0, 0),
|
|
17: (4, 4, 3, 3, 0, 0, 0, 0, 0, 0),
|
|
18: (4, 4, 3, 3, 0, 0, 0, 0, 0, 0),
|
|
19: (4, 4, 3, 3, 1, 0, 0, 0, 0, 0),
|
|
20: (4, 4, 3, 3, 1, 0, 0, 0, 0, 0),
|
|
}
|
|
|
|
|
|
# XGTE
|
|
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"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [
|
|
features.EarForDeceit,
|
|
features.EyeForDetail,
|
|
features.InsightfulFighting,
|
|
]
|
|
features_by_level[9] = [features.SteadyEye]
|
|
features_by_level[13] = [features.UnerringEye]
|
|
features_by_level[17] = [features.EyeForWeakness]
|
|
|
|
|
|
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"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.MasterOfIntrigue, features.MasterOfTactics]
|
|
features_by_level[9] = [features.InsightfulManipulator]
|
|
features_by_level[13] = [features.Misdirection]
|
|
features_by_level[17] = [features.SoulOfDeceit]
|
|
|
|
|
|
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"
|
|
skill_proficiencies = ("nature", "survival")
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.Skirmisher, features.Survivalist]
|
|
features_by_level[9] = [features.SuperiorMobility]
|
|
features_by_level[13] = [features.AmbushMaster]
|
|
features_by_level[17] = [features.SuddenStrike]
|
|
|
|
|
|
class Soulknife(SubClass):
|
|
"""Most assassins strike with physical weapons, and many burglars and
|
|
spies use thieves' tools to infiltrate secure locations. In
|
|
contrast, a Soulknife strikes and infiltrates with the mind,
|
|
cutting through barriers both physical and psychic. These rogues
|
|
discover psionic power within themselves and channel it to do
|
|
their roguish work. They find easy employment as members of
|
|
thieves' guilds, though they are often mistrusted by rogues who
|
|
are leery of anyone using strange mind powers to conduct their
|
|
business. Most governments would also be happy to employ a
|
|
Soulknife as a spy.
|
|
|
|
Amid the trees of ancient forests on the Material Plane and in the
|
|
Feywild, some wood elves walk the path of the Soulknife, serving
|
|
as silent, lethal guardians of their woods. In the endless war
|
|
among the gith, a githzerai is encouraged to become a Soulknife
|
|
when stealth is required against the githyanki foe.
|
|
|
|
As a Soulknife, your psionic abilities might have haunted you
|
|
since you were a child, only revealing their full potential as you
|
|
experienced the stress of adventure. Or you might have sought out
|
|
a reclusive order of psychic adepts and spent years learning how
|
|
to manifest your power.
|
|
|
|
"""
|
|
name = "Soulknife"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.PsionicPower, features.PsychicBlades]
|
|
features_by_level[9] = [features.SoulBlades]
|
|
features_by_level[13] = [features.PsychicVeil]
|
|
features_by_level[17] = [features.RendMind]
|
|
|
|
|
|
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.
|
|
Duelists 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"
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[3] = [features.FancyFootwork, features.RakishAudacity]
|
|
features_by_level[9] = [features.Panache]
|
|
features_by_level[13] = [features.ElegantManeuver]
|
|
features_by_level[17] = [features.MasterDuelist]
|
|
|
|
|
|
class Rogue(CharClass):
|
|
name = "Rogue"
|
|
hit_dice_faces = 8
|
|
subclass_select_level = 3
|
|
saving_throw_proficiencies = ("dexterity", "intelligence")
|
|
primary_abilities = ("dexterity",)
|
|
_proficiencies_text = (
|
|
"light armor",
|
|
"simple weapons",
|
|
"hand crossbows",
|
|
"longswords",
|
|
"rapiers",
|
|
"shortswords",
|
|
"thieves' tools",
|
|
)
|
|
weapon_proficiencies = (
|
|
weapons.SimpleWeapon,
|
|
weapons.HandCrossbow,
|
|
weapons.Longsword,
|
|
weapons.Rapier,
|
|
weapons.Shortsword,
|
|
)
|
|
multiclass_weapon_proficiencies = ()
|
|
_multiclass_proficiencies_text = (
|
|
"light armor",
|
|
"thieves' tools",
|
|
"[choose one skill from Rogue list]",
|
|
)
|
|
class_skill_choices = (
|
|
"Acrobatics",
|
|
"Athletics",
|
|
"Deception",
|
|
"Insight",
|
|
"Intimidation",
|
|
"Investigation",
|
|
"Perception",
|
|
"Performance",
|
|
"Persuasion",
|
|
"Sleight of Hand",
|
|
"Stealth",
|
|
)
|
|
num_skill_choices = 4
|
|
features_by_level = defaultdict(list)
|
|
features_by_level[1] = [features.RogueExpertise, features.SneakAttack]
|
|
features_by_level[2] = [features.CunningAction]
|
|
features_by_level[5] = [features.UncannyDodge]
|
|
features_by_level[7] = [features.Evasion]
|
|
features_by_level[11] = [features.ReliableTalent]
|
|
features_by_level[14] = [features.BlindSense]
|
|
features_by_level[15] = [features.SlipperyMind]
|
|
features_by_level[18] = [features.Elusive]
|
|
features_by_level[20] = [features.StrokeOfLuck]
|
|
subclasses_available = (
|
|
Thief,
|
|
Assassin,
|
|
ArcaneTrickster,
|
|
Inquisitive,
|
|
Mastermind,
|
|
Scout,
|
|
Soulknife,
|
|
Swashbuckler,
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
# slippery mind feature
|
|
if self.owner.Rogue.level >= 15:
|
|
self.saving_throw_proficiencies = ("dexterity", "intelligence", "wisdom")
|