from . 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')