Files
2022-03-19 15:20:13 -03:00

219 lines
7.3 KiB
Python

"""This file defines some homebrew mechanics that can be imported into
character sheets using ``dungeonsheets.import_homebrew``. See
``homebrew.py`` for an example of how these homebrew mechanics can be
used.
"""
from dungeonsheets import race
from dungeonsheets import features as feats
# from dungeonsheets import mecanics
class WildCompanion(feats.Feature):
"""You gain the ability to summon a spirit that assumes an animal form:
as an action, you can expend a use of your Wild Shape feature
to cast the *find familiar* spell, without material components.
When you cast the spell in this way, the familiar
is a fey instead of a beast, and the familiar disapears after
a number of hours equal to half your druid level.
"""
name = "Wild Companion"
source = "Class (Druid)"
# shifters
class Shifting(feats.Feature):
"""As a bonus action, you can assume a more bestial appearence.
This transformation lasts for 1 minute, until you die, or until
you revert to your normal appearence as a bonus action. When you shift,
you gain temporary hit points equal to your level + your Constitution
modifier (minimum of 1 temporary hit point). You also gain additional
benefits that depend on your shifter subrace. Once you shift,
you can't to so again until you finish a short or long rest.
"""
name = "Beasthide Shifting"
source = "Race (Beasthide Shifter)"
class BeasthideShifting(feats.Feature):
"""Whenever you shift, you gain 1d6 additional temporary hit points.
While shifted, you have a +1 bonus to your Armor Class.
"""
name = "Beasthide Shifting (1x/SR)"
source = "Race (Beasthide Shifter)"
class LongtoothShifting(feats.Feature):
"""While shifted, you can use your elongated fangs to make an unarmed
strike as a bonus action. If you hit with your fangs, you can deal
piercing damage equal to 1d6 + your Strength modifier, instead
of the bludgeoning damage normal for an unarmed attack.
"""
name = "Longtooth Shifting (1x/SR)"
source = "Race (Longtooth Shifter)"
class SwiftstrideShifting(feats.Feature):
"""While shifted, your walking speed increases by 10 feet. Additionally,
you can move up to 10 feet as a reaction when a creature ends its turn
within 5 feet of you. This reactive movement doesn't provoke
opportunity attacks.
"""
name = "Swiftstride Shifting (1x/SR)"
source = "Race (Swiftstride Shifter)"
class WildhuntShifting(feats.Feature):
"""While shifted, you have advantage on Wisdom checks, and no creature
within 30 feet of you can make an attack roll with advantage against you,
unless you are incapacitated.
"""
name = "Wildhunt Shifting (1x/SR)"
source = "Race (Beasthide Shifter)"
class NaturalAthlete(feats.Feature):
"""You have proficiency in the Athletics skill.
"""
name = "Natural Athlete"
source = "Race (Beasthide Shifter)"
class Fierce(feats.Feature):
"""You have proficiency in the Intimidation skill.
"""
name = "Fierce"
source = "Race (Longtooth Shifter)"
class Graceful(feats.Feature):
"""You have proficiency in the Acrobatics skill.
"""
name = "Graceful"
source = "Race (Swiftstride Shifter)"
class NaturalTracker(feats.Feature):
"""You have proficiency in the Survival skill.
"""
name = "Natural Tracker"
source = "Race (Wildhunt Shifter)"
class _Shifter(race.Race):
name = "Shifter"
size = "medium"
speed = 30
languages = ("Common", )
features = (feats.Darkvision, Shifting)
class BeasthideShifter(_Shifter):
name = "Beasthide Shifter"
constitution_bonus = 2
strength_bonus = 1
features = _Shifter.features + (BeasthideShifting, NaturalAthlete)
class LongtoothShifter(_Shifter):
name = "Longtooth Shifter"
constitution_bonus = 2
strength_bonus = 1
features = _Shifter.features + (LongtoothShifting, Fierce)
class SwiftstrideShifter(_Shifter):
name = "Swiftstride Shifter"
dexterity_bonus = 2
charisma_bonus = 1
features = _Shifter.features + (SwiftstrideShifting, Graceful)
class WildhuntShifter(_Shifter):
name = "Wildhunt Shifter"
constitution_bonus = 2
strength_bonus = 1
features = _Shifter.features + (WildhuntShifting, NaturalTracker)
class DualMind(feats.Feature):
"""You have advantage on all Wisdom saving throws.
"""
name = "Dual Mind"
source = "Race (Kalashtar)"
class MentalDiscipline(feats.Feature):
"""You have resistance to psychic damage.
"""
name = "Mental Discipline"
source = "Race (Kalashtar)"
class MindLink(feats.Feature):
"""You can speak telepathically to any creature you can see, provided
the crature is within a number of feet of you equal to 10 times your level.
You don't need to share a language with the creature for it to understand
your telepathic utterances, but the creature must be able to
understand at least one language.
When you are using this trait to speak telepathically to a creature,
you can use your action to give that crature the ability to speak
telepatically with you for 1 hour or until you end this effect as an
action. To use this ability, the creature must be able to see you and must
be within this trait's range. You can give this ability to only
one creature at a time; giving it to another creature takes it away from
another creature who has it."""
name = "Mind Link"
source = "Race (Kalashtar)"
class SeveredFromDreams(feats.Feature):
"""Kalashtar sleep, but they don't connect to the plane of dreams
as other creatures do. Instead, their minds draw from the memoires
of their otherworldly spirit while they sleep. As such,
you are immune to spells that require you to dream, like *dream*,
but not to spells and other magical effects that put you to sleep.
"""
name = "Severed from Dreams"
source = "Race (Kalashtar)"
class Kalashtar(race.Race):
name = "Kalashtar"
size = "medium"
speed = 30
charisma_bonus = 1
wisdom_bonus = 2
languages = ("Common", "Quori", )
features = (DualMind, MentalDiscipline, MindLink, SeveredFromDreams)
class PoisonResiliense(feats.Feature):
"""You have advantage on saving throws you make to avoid or end the
poisoned condition on yourself. You also have resistance to poison damage.
"""
name = "Poison Resilience"
source = "Race (Yuan-Ti)"
class SerpentineSpellcasting(feats.Feature):
"""You know the poison spray cantrip. You can cast animal friendship an
unlimited number of times with this trait, but you can target only
snakes with it. Starting at 3rd level, you can also cast suggestion
with this trait. Once you cast it, you can't do so again until you
finish a long rest. You can also cast it using any spell slots you
have of 2nd level or higher.
Intelligence, Wisdom, or Charisma is your spellcasting ability
for these spells when you cast them with this trait
(choose when you select this race).
"""
class Yuan_Ti(race.Race):
name = "Yuan-Ti"
size = "medium"
speed = 30
languages = ("Common", )
features = (feats.Darkvision, feats.MagicResistance, PoisonResiliense,
SerpentineSpellcasting)