Files
dungeon-sheets/dungeonsheets/background.py
T

304 lines
7.3 KiB
Python

from dungeonsheets import features as feats
from dungeonsheets.content_registry import default_content_registry
default_content_registry.add_module(__name__)
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 RivalIntern(Background):
"""You were an intern at a rival of Acquisitions Incorporated, and you
gained a healthy respect for nocjusc the job and the franchising
opportunities. but for the ruth- less and efficient way
Acquisitions Incorporated goes about its business. Why deal with
the rest, when you can work for the best?
Perhaps the rival did not treat you as well as you were hoping, or
you washed out of that organization. Maybe you hope to leverage
the knowledge you gained there for an advantage at Acquisitions
Incorporated. Either way, you're now bringing your talents to the
company, ready to put your skills lo use.
"""
name = "Rival Intern"
skill_proficiencies = ("history", "investigation")
proficiencies_text = ("One type of artisan's tools",)
languages = ("[choose one]",)
features = (feats.InsideInformant,)
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",
)