mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-19 04:33:26 +02:00
304 lines
7.3 KiB
Python
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",
|
|
)
|