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

278 lines
6.3 KiB
Python

from dungeonsheets import features as feats
class Background:
name = "Generic background"
owner = None
skill_proficiencies = ()
weapon_proficiencies = ()
proficiencies_text = ()
skill_choices = ()
num_skill_choices = 0
features = ()
languages = ()
def __init__(self, owner=None):
self.owner = owner
cls = type(self)
self.features = tuple([f(owner=self.owner) for f in cls.features])
def __str__(self):
return self.name
class Acolyte(Background):
name = "Acolyte"
skill_proficiencies = ("insight", "religion")
languages = ("[choose one]", "[choose one]")
features = (feats.ShelterOfTheFaithful,)
class Charlatan(Background):
name = "Charlatan"
skill_proficiencies = ("deception", "sleight of hand")
features = (feats.FalseIdentity,)
class Criminal(Background):
name = "Criminal"
skill_proficiencies = ("deception", "stealth")
features = (feats.CriminalContact,)
class Spy(Criminal):
name = "Spy"
class Entertainer(Background):
name = "Entertainer"
skill_proficiencies = ("acrobatics", "performance")
features = (feats.ByPopularDemand,)
class Gladiator(Entertainer):
name = "Gladiator"
class FolkHero(Background):
name = "Folk Hero"
skill_proficiencies = ("animal handling", "survival")
features = (feats.RusticHospitality,)
class GuildArtisan(Background):
name = "Guild Artisan"
skill_proficiencies = ("insight", "persuasion")
languages = ("[choose one]", "[choose one]")
features = (feats.GuildMembership,)
class GuildMerchant(GuildArtisan):
name = "Guild Merchant"
class Hermit(Background):
name = "Hermit"
skill_proficiencies = ("medicine", "religion")
languages = ("[choose one]",)
features = (feats.Discovery,)
class Noble(Background):
name = "Noble"
skill_proficiencies = ("history", "persuasion")
languages = ("[choose one]",)
features = (feats.PositionOfPrivilege,)
class Knight(Noble):
name = "Knight"
class Outlander(Background):
name = "Outlander"
skill_proficiencies = ("athletics", "survival")
languages = ("[choose one]",)
features = (feats.Wanderer,)
class Sage(Background):
name = "Sage"
skill_proficiencies = ("arcana", "history")
languages = ("[choose one]", "[choose one]")
features = (feats.Researcher,)
class Sailor(Background):
name = "Sailor"
skill_proficiencies = ("athletics", "perception")
features = (feats.ShipsPassage,)
class Pirate(Sailor):
name = "Pirate"
class Soldier(Background):
name = "Soldier"
skill_proficiencies = ("athletics", "intimidation")
features = (feats.MilitaryRank,)
class Urchin(Background):
name = "Urchin"
skill_proficiencies = ("sleight of hand", "stealth")
features = (feats.CitySecrets,)
# Sword's Coast Adventurers Guide
class CityWatch(Background):
name = "City Watch"
skill_proficiencies = ("athletics", "insight")
languages = ("[choose one]", "[choose one]")
features = (feats.WatchersEye,)
class ClanCrafter(Background):
name = "Clan Crafter"
skill_proficiencies = ("history", "insight")
languages = ("Dwarvish",)
features = (feats.RespectOfTheStoutFolk,)
class CloisteredScholar(Background):
name = "Cloistered Scholar"
skill_proficiencies = ("history",)
skill_choices = ("arcana", "nature", "religion")
num_skill_choices = 1
languages = ("[choose one]", "[choose one]")
features = (feats.LibraryAccess,)
class Courtier(Background):
name = "Courtier"
skill_proficiencies = ("insight", "persuasion")
languages = ("[choose one]", "[choose one]")
features = (feats.CourtFunctionary,)
class FactionAgent(Background):
name = "Faction Agent"
skill_proficiencies = ("insight",)
skill_choices = (
"animal handling",
"arcana",
"deception",
"history",
"intimidation",
"investigation",
"medicine",
"nature",
"perception",
"performance",
"persuasion",
"religion",
"survival",
)
num_skill_choices = 1
languages = ("[choose one]", "[choose one]")
features = (feats.SafeHaven,)
class FarTraveler(Background):
name = "Far Traveler"
skill_proficiencies = ("insight", "perception")
languages = ("[choose one]",)
features = (feats.AllEyesOnYou,)
class Inheritor(Background):
name = "Inheritor"
skill_proficiencies = ("survival",)
skill_choices = ("arcana", "history", "religion")
num_skill_choices = 1
languages = ("[choose one]",)
features = (feats.Inheritance,)
class KnightOfTheOrder(Background):
name = "Knight of the Order"
skill_proficiencies = ("persuasion",)
skill_choices = ("arcana", "history", "nature", "religion")
num_skill_choices = 1
languages = ("[choose one]",)
features = (feats.KnightlyRegard,)
class MercenaryVeteran(Background):
name = "Mercenary Veteran"
skill_proficiencies = ("athletics", "persuasion")
features = (feats.MercenaryLife,)
class UrbanBountyHunter(Background):
name = "Urban Bounty Hunter"
skill_proficiencies = ()
skill_choices = ("Deception", "Insight", "Persuasion", "Stealth")
num_skill_choices = 2
features = (feats.EarToTheGround,)
class UthgardtTribeMember(Background):
name = "Uthgardt Tribe Member"
skill_profifiencies = ("athletics", "survival")
languages = ("[choose one]",)
features = (feats.UthgardtHeritage,)
class WaterdhavianNoble(Background):
name = "Waterdhavian Noble"
skill_proficiencies = ("history", "persuasion")
languages = ("[choose one]",)
features = (feats.KeptInStyle,)
PHB_backgrounds = [
Acolyte,
Charlatan,
Criminal,
Spy,
Entertainer,
Gladiator,
FolkHero,
GuildArtisan,
GuildMerchant,
Hermit,
Noble,
Knight,
Outlander,
Sage,
Sailor,
Pirate,
Soldier,
Urchin,
]
SCAG_backgrounds = [
CityWatch,
ClanCrafter,
CloisteredScholar,
Courtier,
FactionAgent,
FarTraveler,
Inheritor,
KnightOfTheOrder,
MercenaryVeteran,
UrbanBountyHunter,
UthgardtTribeMember,
WaterdhavianNoble,
]
available_backgrounds = PHB_backgrounds + SCAG_backgrounds
__all__ = tuple([b.name for b in available_backgrounds]) + (
"PHB_backgrounds",
"SCAG_backgrounds",
"available_backgrounds",
)