mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-18 20:23:27 +02:00
All features added for cleric, druid, fighter, monk
This commit is contained in:
+103
-13
@@ -40,8 +40,17 @@ class KnowledgeDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Knowledge Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.Command, spells.Identify],
|
||||
3: [spells.Augury, spells.Suggestion],
|
||||
5: [spells.Nondetection, spells.SpeakWithDead],
|
||||
7: [spells.ArcaneEye, spells.Confusion],
|
||||
9: [spells.LegendLore, spells.Scrying]}
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.BlessingsOfKnowledge]
|
||||
features_by_level[2] = [features.KnowledgeOfTheAncients]
|
||||
features_by_level[6] = [features.ReadThoughts]
|
||||
features_by_level[8] = [features.PotentSpellcasting]
|
||||
features_by_level[17] = [features.VisionsOfThePast]
|
||||
|
||||
|
||||
class LifeDomain(ClericDomain):
|
||||
@@ -57,8 +66,18 @@ class LifeDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Life Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.Bless, spells.CureWounds],
|
||||
3: [spells.LesserRestoration, spells.SpiritualWeapon],
|
||||
5: [spells.BeaconOfHope, spells.Revivify],
|
||||
7: [spells.DeathWard, spells.GuardianOfFaith],
|
||||
9: [spells.MassCureWounds, spells.RaiseDead]}
|
||||
_proficiencies_text = ('heavy armor',)
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.DiscipleOfLife]
|
||||
features_by_level[2] = [features.PreserveLife]
|
||||
features_by_level[6] = [features.BlessedHealer]
|
||||
features_by_level[8] = [features.DivineStrikeLife]
|
||||
features_by_level[17] = [features.SupremeHealing]
|
||||
|
||||
|
||||
class LightDomain(ClericDomain):
|
||||
@@ -75,8 +94,19 @@ class LightDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Light Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.BurningHands, spells.FaerieFire],
|
||||
3: [spells.FlamingSphere, spells.ScorchingRay],
|
||||
5: [spells.Daylight, spells.Fireball],
|
||||
7: [spells.GuardianOfFaith, spells.WallOfFire],
|
||||
9: [spells.FlameStrike, spells.Scrying]}
|
||||
spells_known = (spells.Light,)
|
||||
spells_prepared = (spells.Light,)
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.WardingFlare]
|
||||
features_by_level[2] = [features.RadianceOfTheDawn]
|
||||
features_by_level[6] = [features.ImprovedFlare]
|
||||
features_by_level[8] = [features.PotentSpellcasting]
|
||||
features_by_level[17] = [features.CoronaOfLight]
|
||||
|
||||
|
||||
class NatureDomain(ClericDomain):
|
||||
@@ -93,8 +123,18 @@ class NatureDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Nature Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.AnimalFriendship, spells.SpeakWithAnimals],
|
||||
3: [spells.Barkskin, spells.SpikeGrowth],
|
||||
5: [spells.PlantGrowth, spells.WindWall],
|
||||
7: [spells.DominateBeast, spells.GraspingVine],
|
||||
9: [spells.InsectPlague, spells.TreeStride]}
|
||||
_proficiencies_text = ('heavy armor',)
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.AcolyteOfNature]
|
||||
features_by_level[2] = [features.CharmAnimalsAndPlants]
|
||||
features_by_level[6] = [features.DampenElements]
|
||||
features_by_level[8] = [features.DivineStrikeNature]
|
||||
features_by_level[17] = [features.MasterOfNature]
|
||||
|
||||
|
||||
class TempestDomain(ClericDomain):
|
||||
@@ -120,11 +160,11 @@ class TempestDomain(ClericDomain):
|
||||
weapon_proficiencies = (weapons.MartialWeapon,)
|
||||
_proficiencies_text = ('martial weapons', 'heavy armor')
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = (features.WrathOfTheStorm,)
|
||||
features_by_level[2] = (features.DestructiveWrath,)
|
||||
features_by_level[6] = (features.ThunderboltStrike,)
|
||||
features_by_level[8] = (features.DivineStrikeTempest,)
|
||||
features_by_level[17] = (features.Stormborn,)
|
||||
features_by_level[1] = [features.WrathOfTheStorm]
|
||||
features_by_level[2] = [features.DestructiveWrath]
|
||||
features_by_level[6] = [features.ThunderboltStrike]
|
||||
features_by_level[8] = [features.DivineStrikeTempest]
|
||||
features_by_level[17] = [features.Stormborn]
|
||||
|
||||
|
||||
class TrickeryDomain(ClericDomain):
|
||||
@@ -139,8 +179,17 @@ class TrickeryDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Trickery Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.CharmPerson, spells.DisguiseSelf],
|
||||
3: [spells.MirrorImage, spells.PassWithoutTrace],
|
||||
5: [spells.Blink, spells.DispelMagic],
|
||||
7: [spells.DimensionDoor, spells.Polymorph],
|
||||
9: [spells.DominatePerson, spells.ModifyMemory]}
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.BlessingOfTheTrickster]
|
||||
features_by_level[2] = [features.InvokeDuplicity]
|
||||
features_by_level[6] = [features.CloakOfShadows]
|
||||
features_by_level[8] = [features.DivineStrikeTrickery]
|
||||
features_by_level[17] = [features.ImprovedDuplicity]
|
||||
|
||||
|
||||
class WarDomain(ClericDomain):
|
||||
@@ -159,8 +208,19 @@ class WarDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "War Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.DivineFavor, spells.ShieldOfFaith],
|
||||
3: [spells.MagicWeapon, spells.SpiritualWeapon],
|
||||
5: [spells.CrusadersMantle, spells.SpiritGuardians],
|
||||
7: [spells.FreedomOfMovement, spells.Stoneskin],
|
||||
9: [spells.FlameStrike, spells.HoldMonster]}
|
||||
weapon_proficiencies = (weapons.MartialWeapon,)
|
||||
_proficiencies_text = ('martial weapons', 'heavy armor')
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.WarPriest]
|
||||
features_by_level[2] = [features.GuidedStrike]
|
||||
features_by_level[6] = [features.WarGodsBlessing]
|
||||
features_by_level[8] = [features.DivineStrikeWar]
|
||||
features_by_level[17] = [features.AvatarOfBattle]
|
||||
|
||||
|
||||
# SCAG
|
||||
@@ -181,8 +241,17 @@ class ArcanaDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Arcana Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.DetectMagic, spells.MagicMissile],
|
||||
3: [spells.MagicWeapon, spells.NystulsMagicAura],
|
||||
5: [spells.DispelMagic, spells.MagicCircle],
|
||||
7: [spells.ArcaneEye, spells.LeomundsSecretChest],
|
||||
9: [spells.PlanarBinding, spells.TeleportationCircle]}
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.ArcaneInitiate]
|
||||
features_by_level[2] = [features.ArcaneAbjuration]
|
||||
features_by_level[6] = [features.SpellBreaker]
|
||||
features_by_level[8] = [features.PotentSpellcasting]
|
||||
features_by_level[17] = [features.ArcaneMastery]
|
||||
|
||||
|
||||
# XGTE
|
||||
@@ -201,7 +270,18 @@ class ForgeDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Forge Domain"
|
||||
_domain_spells = {1: [spells.Identify, spells.SearingSmite],
|
||||
3: [spells.HeatMetal, spells.MagicWeapon],
|
||||
5: [spells.ElementalWeapon, spells.ProtectionFromEnergy],
|
||||
7: [spells.Fabricate, spells.WallOfFire],
|
||||
9: [spells.AnimateObjects, spells.Creation]}
|
||||
_proficiencies_text = ('heavy armor', "smith's tools")
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.BlessingOfTheForge]
|
||||
features_by_level[2] = [features.ArtisansBlessing]
|
||||
features_by_level[6] = [features.SoulOfTheForge]
|
||||
features_by_level[8] = [features.DivineStrikeForge]
|
||||
features_by_level[17] = [features.SaintOfForgeAndFire]
|
||||
|
||||
|
||||
class GraveDomain(ClericDomain):
|
||||
@@ -218,8 +298,18 @@ class GraveDomain(ClericDomain):
|
||||
|
||||
"""
|
||||
name = "Grave Domain"
|
||||
_domain_spells = {1: [], 3: [], 5: [], 7: [], 9: []}
|
||||
_domain_spells = {1: [spells.Bane, spells.FalseLife],
|
||||
3: [spells.GentleRepose, spells.RayOfEnfeeblement],
|
||||
5: [spells.Revivify, spells.VampiricTouch],
|
||||
7: [spells.Blight, spells.DeathWard],
|
||||
9: [spells.AntilifeShell, spells.RaiseDead]}
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.CircleOfMortality,
|
||||
features.EyesOfTheGrave]
|
||||
features_by_level[2] = [features.PathToTheGrave]
|
||||
features_by_level[6] = [features.SentinelAtDeathsDoor]
|
||||
features_by_level[8] = [features.PotentSpellcasting]
|
||||
features_by_level[17] = [features.KeeperOfSouls]
|
||||
|
||||
|
||||
class Cleric(CharClass):
|
||||
|
||||
@@ -21,6 +21,11 @@ class LandCircle(SubClass):
|
||||
name = "Circle of the Land"
|
||||
circle = "land"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[2] = [features.BonusCantrip, features.NaturalRecovery]
|
||||
features_by_level[3] = [features.CircleSpells]
|
||||
features_by_level[6] = [features.LandsStride]
|
||||
features_by_level[10] = [features.NaturesWard]
|
||||
features_by_level[14] = [features.NaturesSanctuary]
|
||||
|
||||
|
||||
class MoonCircle(SubClass):
|
||||
@@ -39,6 +44,10 @@ class MoonCircle(SubClass):
|
||||
name = "Circle of the Moon"
|
||||
circle = "moon"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[2] = [features.CombatWildShape, features.CircleForms]
|
||||
features_by_level[6] = [features.PrimalStrike]
|
||||
features_by_level[10] = [features.ElementalWildShape]
|
||||
features_by_level[14] = [features.ThousandForms]
|
||||
|
||||
|
||||
# XGTE
|
||||
@@ -55,6 +64,10 @@ class DreamsCircle(SubClass):
|
||||
name = "Circle of Dreams"
|
||||
circle = "dreams"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[2] = [features.BalmOfTheSummerCourt]
|
||||
features_by_level[6] = [features.HearthOfMoonlightAndShadow]
|
||||
features_by_level[10] = [features.HiddenPaths]
|
||||
features_by_level[14] = [features.WalkerInDreams]
|
||||
|
||||
|
||||
class ShepherdCircle(SubClass):
|
||||
@@ -78,7 +91,12 @@ class ShepherdCircle(SubClass):
|
||||
"""
|
||||
name = "Circle of the Shepherd"
|
||||
circle = "shepherd"
|
||||
languages = ('Sylvan',)
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[2] = [features.SpeechOfTheWoods, features.SpiritTotem]
|
||||
features_by_level[6] = [features.MightySummoner]
|
||||
features_by_level[10] = [features.GuardianSpirit]
|
||||
features_by_level[14] = [features.FaithfulSummons]
|
||||
|
||||
|
||||
class Druid(CharClass):
|
||||
@@ -106,7 +124,10 @@ class Druid(CharClass):
|
||||
class_skill_choices = ('Arcana', 'Animal Handling', 'Insight',
|
||||
'Medicine', 'Nature', 'Perception', 'Religion',
|
||||
'Survival')
|
||||
features_by_class = defaultdict(list)
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[2] = [features.WildShape]
|
||||
features_by_level[18] = [features.TimelessBody, features.BeastSpells]
|
||||
features_by_level[20] = [features.Archdruid]
|
||||
subclasses_available = (LandCircle, MoonCircle, DreamsCircle,
|
||||
ShepherdCircle)
|
||||
spellcasting_ability = 'wisdom'
|
||||
|
||||
@@ -102,6 +102,10 @@ class PurpleDragonKnight(SubClass):
|
||||
"""
|
||||
name = "Purple Dragon Knight"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.RallyingCry]
|
||||
features_by_level[7] = [features.RoyalEnvoy]
|
||||
features_by_level[10] = [features.InspiringSurge]
|
||||
features_by_level[15] = [features.Bulwark]
|
||||
|
||||
|
||||
# XGTE
|
||||
@@ -118,6 +122,9 @@ class ArcaneArcher(SubClass):
|
||||
"""
|
||||
name = "Arcane Archer"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.ArcaneArcherLore, features.ArcaneShot]
|
||||
features_by_level[7] = [features.MagicArrow, features.CurvingShot]
|
||||
features_by_level[15] = [features.EverReadyShot]
|
||||
|
||||
|
||||
class Cavalier(SubClass):
|
||||
@@ -132,6 +139,12 @@ class Cavalier(SubClass):
|
||||
"""
|
||||
name = "Cavalier"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.BonusProficiencyCavalier,
|
||||
features.BornToTheSaddle, features.UnwaveringMark]
|
||||
features_by_level[7] = [features.WardingManeuver]
|
||||
features_by_level[10] = [features.HoldTheLine]
|
||||
features_by_level[15] = [features.FerociousCharger]
|
||||
features_by_level[18] = [features.VigilantDefender]
|
||||
|
||||
|
||||
class Samurai(SubClass):
|
||||
@@ -142,6 +155,12 @@ class Samurai(SubClass):
|
||||
"""
|
||||
name = "Samurai"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.BonusProficiencySamurai,
|
||||
features.FightingSpirit]
|
||||
features_by_level[7] = [features.ElegantCourtier]
|
||||
features_by_level[10] = [features.TirelessSpirit]
|
||||
features_by_level[15] = [features.RapidStrike]
|
||||
features_by_level[18] = [features.StrengthBeforeDeath]
|
||||
|
||||
|
||||
# Custom
|
||||
|
||||
@@ -15,6 +15,10 @@ class OpenHandWay(SubClass):
|
||||
"""
|
||||
name = "Way of the Open Hand"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.OpenHandTechnique]
|
||||
features_by_level[6] = [features.WholenessOfBody]
|
||||
features_by_level[11] = [features.Tranquility]
|
||||
features_by_level[17] = [features.QuiveringPalm]
|
||||
|
||||
|
||||
class ShadowWay(SubClass):
|
||||
@@ -30,6 +34,10 @@ class ShadowWay(SubClass):
|
||||
"""
|
||||
name = "Way of Shadow"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.ShadowArts]
|
||||
features_by_level[6] = [features.ShadowStep]
|
||||
features_by_level[11] = [features.CloakOfShadows]
|
||||
features_by_level[17] = [features.Opportunist]
|
||||
|
||||
|
||||
class FourElementsWay(SubClass):
|
||||
@@ -45,21 +53,13 @@ class FourElementsWay(SubClass):
|
||||
|
||||
"""
|
||||
name = "Way of the Four Elements"
|
||||
spellcasting_ability = 'wisdom'
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.DiscipleOfTheElements,
|
||||
features.ElementalAttunement]
|
||||
|
||||
|
||||
# SCAG
|
||||
class SunSoulWay(SubClass):
|
||||
"""Monks of the Way of the Sun Soul learn to channel their own life energy
|
||||
into searing bolts of light. They teach that meditation can unlock the
|
||||
ability to unleash the indomitable light shed by the soul of every living
|
||||
creature
|
||||
|
||||
"""
|
||||
name = "Way of the Sun Soul"
|
||||
features_by_level = defaultdict(list)
|
||||
|
||||
|
||||
class LongDeathWay(SubClass):
|
||||
"""Monks of the Way of the Long Death are obsessed with the meaning and
|
||||
mechanics of dying. They capture creatures and prepare elaborate
|
||||
@@ -70,6 +70,25 @@ class LongDeathWay(SubClass):
|
||||
"""
|
||||
name = "Way of the Long Death"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.TouchOfDeath]
|
||||
features_by_level[6] = [features.HourOfReaping]
|
||||
features_by_level[11] = [features.MasteryOfDeath]
|
||||
features_by_level[17] = [features.TouchOfTheLongDeath]
|
||||
|
||||
|
||||
class SunSoulWay(SubClass):
|
||||
"""Monks of the Way of the Sun Soul learn to channel their own life energy
|
||||
into searing bolts of light. They teach that meditation can unlock the
|
||||
ability to unleash the indomitable light shed by the soul of every living
|
||||
creature
|
||||
|
||||
"""
|
||||
name = "Way of the Sun Soul"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.RadiantSunBolt]
|
||||
features_by_level[6] = [features.SearingArcStrike]
|
||||
features_by_level[11] = [features.SearingSunburst]
|
||||
features_by_level[17] = [features.SunShield]
|
||||
|
||||
|
||||
# XGTE
|
||||
@@ -87,7 +106,13 @@ class DrunkenMasterWay(SubClass):
|
||||
|
||||
"""
|
||||
name = "Way of the Drunken Master"
|
||||
_proficiencies_text = ("brewer's suplies",)
|
||||
skill_proficiencies = ("performance",)
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.DrunkenTechnique]
|
||||
features_by_level[6] = [features.TipsySway]
|
||||
features_by_level[11] = [features.DrunkardsLuck]
|
||||
features_by_level[17] = [features.IntoxicatedFrenzy]
|
||||
|
||||
|
||||
class KenseiWay(SubClass):
|
||||
@@ -105,6 +130,10 @@ class KenseiWay(SubClass):
|
||||
"""
|
||||
name = "Way of the Kensei"
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[3] = [features.PathOfTheKensei]
|
||||
features_by_level[6] = [features.OneWithTheBlade]
|
||||
features_by_level[11] = [features.SharpenTheBlade]
|
||||
features_by_level[17] = [features.UnerringAccuracy]
|
||||
|
||||
|
||||
class Monk(CharClass):
|
||||
@@ -130,6 +159,20 @@ class Monk(CharClass):
|
||||
features_by_level = defaultdict(list)
|
||||
features_by_level[1] = [features.UnarmoredDefenseMonk,
|
||||
features.MartialArts]
|
||||
features_by_level[2] = [features.Ki, features.FlurryOfBlows,
|
||||
features.PatientDefense, features.StepOfTheWind,
|
||||
features.UnarmoredMovement]
|
||||
features_by_level[3] = [features.DeflectMissiles]
|
||||
features_by_level[4] = [features.SlowFall]
|
||||
features_by_level[5] = [features.ExtraAttackMonk, features.StunningStrike]
|
||||
features_by_level[6] = [features.KiEmpoweredStrikes]
|
||||
features_by_level[7] = [features.Evasion, features.StillnessOfMind]
|
||||
features_by_level[10] = [features.PurityOfBody]
|
||||
features_by_level[13] = [features.TongueOfTheSunAndMoon]
|
||||
features_by_level[14] = [features.DiamondSoul]
|
||||
features_by_level[15] = [features.TimelessBody]
|
||||
features_by_level[18] = [features.EmptyBody]
|
||||
features_by_level[20] = [features.PerfectSelf]
|
||||
|
||||
def __init__(self, level, subclass=None, **params):
|
||||
super().__init__(level, subclass=subclass, **params)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from .features import Feature
|
||||
from .. import spells
|
||||
|
||||
|
||||
# Cleric Features
|
||||
@@ -97,6 +98,280 @@ class DivineIntervention(Feature):
|
||||
source = "Cleric"
|
||||
|
||||
|
||||
class DivineStrike(Feature):
|
||||
"""
|
||||
Generic Divine Strike
|
||||
"""
|
||||
_name = "Divine Strike"
|
||||
source = "Cleric"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
level = self.owner.Cleric.level
|
||||
damage = ' (1d8)'
|
||||
if level >= 14:
|
||||
damage = ' (2d8)'
|
||||
return self._name + damage
|
||||
|
||||
|
||||
# Knowledge Domain
|
||||
class BlessingsOfKnowledge(Feature):
|
||||
"""At 1st level, you learn two languages of your choice. You also become
|
||||
proficient in your choice o f two of the following skills: Arcana, History,
|
||||
Nature, or Religion. Your proficiency bonus is doubled for any ability
|
||||
check you make that uses either of those skills.
|
||||
|
||||
"""
|
||||
name = "Blessings of Knowledge"
|
||||
source = "Cleric (Knowledge Domain)"
|
||||
|
||||
|
||||
class KnowledgeOfTheAncients(DivineIntervention):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to tap into a
|
||||
divine well o f knowledge. As an action, you choose one skill or tool. For
|
||||
10 minutes, you have proficiency with the chosen skill or tool.
|
||||
|
||||
"""
|
||||
name = "Divine Intervention: Knowledge of the Ancients"
|
||||
source = "Cleric (Knowledge Domain)"
|
||||
|
||||
|
||||
class ReadThoughts(DivineIntervention):
|
||||
"""At 6th level, you can use your Channel Divinity to read a creature’s
|
||||
thoughts. You can then use your access to the creature’s mind to command
|
||||
it. As an action, choose one creature that you can see within 60 feet of
|
||||
you. That creature must make a Wisdom saving throw. If the creature
|
||||
succeeds on the saving throw, you can’t use this feature on it again until
|
||||
you finish a long rest.
|
||||
|
||||
If the creature fails its save, you can read its surface thoughts (those
|
||||
foremost in its mind, reflecting its current emotions and what it is
|
||||
actively thinking about) when it is within 60 feet of you. This effect
|
||||
lasts for 1 minute. During that time, you can use your action to end this
|
||||
effect and cast the suggestion spell on the creature without expending a
|
||||
spell slot. The target automatically fails its saving throw against the
|
||||
spell.
|
||||
|
||||
"""
|
||||
name = "Divine Intervention: Read Thoughts"
|
||||
source = "Cleric (Knowledge Domain)"
|
||||
|
||||
|
||||
class PotentSpellcasting(Feature):
|
||||
"""Starting at 8th level, you add your W isdom modifier to the damage you deal
|
||||
with any cleric cantrip.
|
||||
|
||||
"""
|
||||
name = "Potent Spellcasting"
|
||||
source = "Cleric"
|
||||
|
||||
|
||||
class VisionsOfThePast(Feature):
|
||||
"""Starting at 17th level, you can call up visions of the past that relate to
|
||||
an object you hold or your immediate surroundings. You spend at least 1
|
||||
minute in meditation and prayer, then receive dreamlike, shadowy glimpses
|
||||
of recent events. You can meditate in this way for a number of minutes
|
||||
equal to your Wisdom score and must maintain concentration during that
|
||||
time, as if you were casting a spell. Once you use this feature, you can’t
|
||||
use it again until you finish a short or long rest.
|
||||
|
||||
**Object Reading**: Holding an object as you meditate, you can see visions
|
||||
of the object’s previous owner. After meditating for 1 minute, you learn
|
||||
how the owner acquired and lost the object, as well as the most recent
|
||||
significant event involving the object and that owner. If the object was
|
||||
owned by another creature in the recent past (within a number of days equal
|
||||
to your Wisdom score), you can spend 1 additional minute for each owner to
|
||||
learn the same information about that creature.
|
||||
|
||||
**Area Reading**: As you meditate, you see visions of recent events in your
|
||||
immediate vicinity (a room, street, tunnel, clearing, or the like, up to a
|
||||
50-foot cube), going back a number of days equal to your Wisdom score. For
|
||||
each minute you meditate, you learn about one significant event, beginning
|
||||
with the most recent. Significant events typically involve powerful
|
||||
emotions, such as battles and betrayals, marriages and murders, births and
|
||||
funerals. However, they might also include more mundane events that are
|
||||
nevertheless important in your current situation.
|
||||
|
||||
"""
|
||||
name = "Visions of the Past"
|
||||
source = "Cleric (Knowledge Domain)"
|
||||
|
||||
|
||||
# Life Domain
|
||||
class DiscipleOfLife(Feature):
|
||||
"""Also starting at 1st level, your healing spells are more
|
||||
effective. Whenever you use a spell of 1st level or higher to restore hit
|
||||
points to a creature, the creature regains additional hit points equal to 2
|
||||
+ the spell’s level
|
||||
|
||||
"""
|
||||
name = "Disciple of Life"
|
||||
source = "Cleric (Life Domain)"
|
||||
|
||||
|
||||
class PreserveLife(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to heal the badly
|
||||
injured. As an action, you present your holy symbol and evoke healing
|
||||
energy that can restore a number of hit points equal to five times your
|
||||
cleric level. Choose any creatures within 30 feet of you, and divide those
|
||||
hit points among them. This feature can restore a creature to no more than
|
||||
half of its hit point maximum. You can’t use this feature on an undead or a
|
||||
construct.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Preserve Life"
|
||||
source = "Cleric (Life Domain)"
|
||||
|
||||
|
||||
class BlessedHealer(Feature):
|
||||
"""Beginning at 6th level, the healing spells you cast on others heal you as
|
||||
well. When you cast a spell of 1st level or higher that restores hit points
|
||||
to a creature other than you, you regain hit points equal to 2 + the
|
||||
spell’s level.
|
||||
|
||||
"""
|
||||
name = "Blessed Healer"
|
||||
source = "Cleric (Life Domain)"
|
||||
|
||||
|
||||
class DivineStrikeLife(DivineStrike):
|
||||
"""At 8th level, you gain the ability to infuse your weapon strikes with
|
||||
divine energy. Once on each o f your turns when you hit a creature with a
|
||||
weapon attack, you can cause the attack to deal an extra 1d8 radiant damage
|
||||
to the target. When you reach 14th level, the extra damage increases to
|
||||
2d8.
|
||||
|
||||
"""
|
||||
source = "Cleric (Life Domain)"
|
||||
|
||||
|
||||
class SupremeHealing(Feature):
|
||||
"""Starting at 17th level, when you would normally roll one or more dice to
|
||||
restore hit points with a spell, you instead use the highest number
|
||||
possible for each die. For example, instead of restoring 2d6 hit points to
|
||||
a creature, you restore 12.
|
||||
|
||||
"""
|
||||
name = "Supreme Healing"
|
||||
source = "Cleric (Life Domain)"
|
||||
|
||||
|
||||
# Light Domain
|
||||
class WardingFlare(Feature):
|
||||
"""At 1st level, you can interpose divine light between yourself and an
|
||||
attacking enemy. When you are attacked by a creature within 30 feet of you
|
||||
that you can see, you can use your reaction to impose disadvantage on the
|
||||
attack roll, causing light to flare before the attacker before it hits or
|
||||
misses. An attacker that can’t be blinded is immune to this feature. You
|
||||
can use this feature a number of times equal to your Wisdom modifier (a
|
||||
minimum of once). You regain all expended uses when you finish a long rest
|
||||
|
||||
"""
|
||||
_name = "Warding Flare"
|
||||
source = "Cleric (Light Domain)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
times = max(1, self.owner.wisdom.modifier)
|
||||
return self._name + " ({:d}x/LR)".format(times)
|
||||
|
||||
|
||||
class RadianceOfTheDawn(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to harness
|
||||
sunlight, banishing darkness and dealing radiant damage to your foes. As an
|
||||
action, you present your holy symbol, and any magical darkness within 30
|
||||
feet of you is dispelled.
|
||||
|
||||
Additionally, each hostile creature within 30 feet of you must make a
|
||||
Constitution saving throw. A creature takes radiant damage equal to 2d10 +
|
||||
your cleric level on a failed saving throw, and half as much damage on a
|
||||
successful one. A creature that has total cover from you is not affected.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Radiance of the Dawn"
|
||||
source = "Cleric (Light Domain)"
|
||||
|
||||
|
||||
class ImprovedFlare(Feature):
|
||||
"""Starting at 6th level, you can also use your Warding Flare feature when a
|
||||
creature that you can see within 30 feet o f you attacks a creature other
|
||||
than you.
|
||||
|
||||
"""
|
||||
name = "Improved Flare"
|
||||
source = "Cleric (Light Domain)"
|
||||
|
||||
|
||||
class CoronaOfLight(Feature):
|
||||
"""Starting at 17th level, you can use your action to activate an aura of
|
||||
sunlight that lasts for 1 minute or until you dismiss it using another
|
||||
action. You emit bright light in a 60-foot radius and dim light 30 feet
|
||||
beyond that. Your enemies in the bright light have disadvantage on saving
|
||||
throws against any spell that deals fire or radiant damage
|
||||
|
||||
"""
|
||||
name = "Corona of Light"
|
||||
source = "Cleric (Light Domain)"
|
||||
|
||||
|
||||
# Nature Domain
|
||||
class AcolyteOfNature(Feature):
|
||||
"""At 1st level, you learn one druid cantrip of your choice. You also gain
|
||||
proficiency in one of the following skills of your choice: Animal Handling,
|
||||
Nature, or Survival.
|
||||
|
||||
"""
|
||||
name = "Acolyte of Nature"
|
||||
source = "Cleric (Nature Domain)"
|
||||
|
||||
|
||||
class CharmAnimalsAndPlants(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to charm animals
|
||||
and plants. As an action, you present your holy symbol and invoke the name
|
||||
of your deity. Each beast or plant creature that can see you within 30 feet
|
||||
of you must make a Wisdom saving throw.
|
||||
|
||||
If the creature fails its saving throw, it is charmed by you for 1 minute
|
||||
or until it takes damage. While it is charmed by you, it is friendly to you
|
||||
and other creatures you designate.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Charm Animals and Plants"
|
||||
source = "Cleric (Nature Domain)"
|
||||
|
||||
|
||||
class DampenElements(Feature):
|
||||
"""Starting at 6th level, when you or a creature within 30 feet of you takes
|
||||
acid, cold, fire, lightning, or thunder damage, you can use your reaction
|
||||
to grant resistance to the creature against that instance of the damage.
|
||||
|
||||
"""
|
||||
name = "Dampen Elements"
|
||||
source = "Cleric (Nature Domain)"
|
||||
|
||||
|
||||
class DivineStrikeNature(DivineStrike):
|
||||
"""At 8th level, you gain the ability to infuse your weapon strikes with
|
||||
divine energy. Once on each of your turns when you hit a creature with a
|
||||
weapon attack, you can cause the attack to deal an extra 1d8 cold, fire, or
|
||||
lightning damage (your choice) to the target. When you reach 14th level,
|
||||
the extra damage increases to 2d8.
|
||||
|
||||
"""
|
||||
source = "Cleric (Nature Domain)"
|
||||
|
||||
|
||||
class MasterOfNature(Feature):
|
||||
"""At 17th level, you gain the ability to command animals and plant
|
||||
creatures. While creatures are charmed by your Charm Animals and Plants
|
||||
feature, you can take a bonus action on your turn to verbally command what
|
||||
each of those creatures will do on its next turn.
|
||||
|
||||
"""
|
||||
name = "Master of Nature"
|
||||
source = "Cleric (Nature Domain)"
|
||||
|
||||
|
||||
# Tempest Domain
|
||||
class WrathOfTheStorm(Feature):
|
||||
"""Also at 1st level, you can thunderously rebuke attackers. When a creature
|
||||
@@ -139,7 +414,7 @@ class ThunderboltStrike(Feature):
|
||||
source = "Cleric (Tempest Domain)"
|
||||
|
||||
|
||||
class DivineStrikeTempest(Feature):
|
||||
class DivineStrikeTempest(DivineStrike):
|
||||
"""At 8th level, you gain the ability to infuse your weapon strikes with
|
||||
divine energy. Once on each of your turns when you hit a creature with a
|
||||
weapon attack, you can cause the attack to deal an extra 1d8 thunder damage
|
||||
@@ -147,21 +422,360 @@ class DivineStrikeTempest(Feature):
|
||||
2d8.
|
||||
|
||||
"""
|
||||
_name = "Divine Strike"
|
||||
source = "Cleric (Tempest Domain)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
level = self.owner.Cleric.level
|
||||
if level < 14:
|
||||
return self._name + " (1d8)"
|
||||
else:
|
||||
return self._name + " (2d8)"
|
||||
|
||||
|
||||
class Stormborn(Feature):
|
||||
"""At 17th level, you have a flying speed equal to your current walking speed
|
||||
whenever you are not underground or indoors.
|
||||
whenever you are not underground or indoors.
|
||||
|
||||
"""
|
||||
name = "Stormborn"
|
||||
source = "Cleric (Tempest Domain)"
|
||||
|
||||
|
||||
# Trickery Domain
|
||||
class BlessingOfTheTrickster(Feature):
|
||||
"""Starting when you choose this domain at 1st level, you can use your action
|
||||
to touch a willing creature other than yourself to give it advantage on
|
||||
Dexterity (Stealth) checks. This blessing lasts for 1 hour or until you use
|
||||
this feature again
|
||||
|
||||
"""
|
||||
name = "Blessing of the Trickster"
|
||||
source = "Cleric (Trickery Domain)"
|
||||
|
||||
|
||||
class InvokeDuplicity(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to create an
|
||||
illusory duplicate o f yourself. As an action, you create a perfect
|
||||
illusion of yourself that lasts for 1 minute, or until you lose your
|
||||
concentration (as if you were concentrating on a spell). The illusion
|
||||
appears in an unoccupied space that you can see within 30 feet of you. As a
|
||||
bonus action on your turn, you can move the illusion up to 30 feet to a
|
||||
space you can see, but it must remain within 120 feet of you.
|
||||
|
||||
For the duration, you can cast spells as though you were in the illusion’s
|
||||
space, but you must use your own senses. Additionally, when both you and
|
||||
your illusion are within 5 feet of a creature that can see the illusion,
|
||||
you have advantage on attack rolls against that creature, given how
|
||||
distracting the illusion is to the target.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Invoke Duplicity"
|
||||
source = "Cleric (Trickery Domain)"
|
||||
|
||||
|
||||
class CloakOfShadows(ChannelDivinity):
|
||||
"""Starting at 6th level, you can use your Channel Divinity to vanish. As an
|
||||
action, you become invisible until the end of your next turn. You become
|
||||
visible if you attack or cast a spell.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Cloak of Shadows"
|
||||
source = "Cleric (Trickery Domain)"
|
||||
|
||||
|
||||
class DivineStrikeTrickery(DivineStrike):
|
||||
"""At 8th level, you gain the ability to infuse your weapon strikes with
|
||||
poison—a gift from your deity. Once on each of your turns when you hit a
|
||||
creature with a weapon attack, you can cause the attack to deal an extra
|
||||
1d8 poison damage to the target. When you reach 14th level, the extra
|
||||
damage increases to 2d8.
|
||||
|
||||
"""
|
||||
source = "Cleric (Trickery Domain)"
|
||||
|
||||
|
||||
class ImprovedDuplicity(Feature):
|
||||
"""At 17th level, you can create up to four duplicates of yourself, instead of
|
||||
one, when you use Invoke Duplicity. As a bonus action on your turn, you can
|
||||
move any number of them up to 30 feet, to a maximum range of 120 feet.
|
||||
|
||||
"""
|
||||
name = "Improved Duplicity"
|
||||
source = "Cleric (Trickery Domain)"
|
||||
|
||||
|
||||
# War Domain
|
||||
class WarPriest(Feature):
|
||||
"""From 1st level, your god delivers bolts of inspiration to you while you are
|
||||
engaged in battle. When you use the Attack action, you can make one weapon
|
||||
attack as a bonus action. You can use this feature a number of times equal
|
||||
to your Wisdom modifier (a minimum of once). You regain all expended uses
|
||||
when you finish a long rest
|
||||
|
||||
"""
|
||||
_name = "War Priest"
|
||||
source = "Cleric (War Domain)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = max(1, self.owner.wisdom.modifier)
|
||||
return self._name + " ({:d}x/LR)".format(num)
|
||||
|
||||
|
||||
class GuidedStrike(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to strike with
|
||||
supernatural accuracy. When you make an attack roll, you can use your
|
||||
Channel Divinity to gain a +10 bonus to the roll. You make this choice
|
||||
after you see the roll, but before the DM says whether the attack hits or
|
||||
misses
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Guided Strike"
|
||||
source = "Cleric (War Domain)"
|
||||
|
||||
|
||||
class WarGodsBlessing(ChannelDivinity):
|
||||
"""At 6th level, when a creature within 30 feet of you makes an attack roll,
|
||||
you can use your reaction to grant that creature a +10 bonus to the roll,
|
||||
using your Channel Divinity. You make this choice after you see the roll,
|
||||
but before the DM says whether the attack hits or misses.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: War Gods Blessing"
|
||||
source = "Cleric (War Domain)"
|
||||
|
||||
|
||||
class DivineStrikeWar(DivineStrike):
|
||||
"""At 8th level, you gain the ability to infuse your weapon strikes with
|
||||
divine energy. Once on each of your turns when you hit a creature with a
|
||||
weapon attack, you can cause the attack to deal an extra 1d8 damage of the
|
||||
same type dealt by the weapon to the target. When you reach 14th level, the
|
||||
extra damage increases to 2d8.
|
||||
"""
|
||||
source = "Cleric (War Domain)"
|
||||
|
||||
|
||||
class AvatarOfBattle(Feature):
|
||||
"""At 17th level, you gain resistance to bludgeoning, piercing, and slashing
|
||||
damage from nonmagical weapons.
|
||||
|
||||
"""
|
||||
name = "Avatar of Battle"
|
||||
source = "Cleric (War Domain)"
|
||||
|
||||
|
||||
# Arcana Domain
|
||||
class ArcaneInitiate(Feature):
|
||||
"""When you choose this domain at 1st level, you gain proficiency in the
|
||||
Arcana skill, and you gain two cantrips of your choice from the wizard
|
||||
spell list. For you, these cantrips count as cleric cantrips
|
||||
|
||||
"""
|
||||
name = "Arcane Initiate"
|
||||
source = "Cleric (Arcana Domain)"
|
||||
|
||||
|
||||
class ArcaneAbjuration(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to abjure
|
||||
otherworldly creatures. As an action, you present your holy symbol, and one
|
||||
celestial, elemental, fey, or fiend of your choice that is within 30 feet
|
||||
of you must make a Wisdom saving throw, provided that the creature can see
|
||||
or hear you. If the creature fails its saving throw, it is turned for 1
|
||||
minute or until it takes any damage.
|
||||
|
||||
A turned creature must spend its turns trying to move as far away from you
|
||||
as it can, and it can't willingly end its move in a space within 30 feet of
|
||||
you. It also can't take reactions. For its action, it can only use the Dash
|
||||
action or try to escape from an effect that prevents it from moving. If
|
||||
there's nowhere to move, the creature can use the Dodge action.
|
||||
|
||||
After you reach 5th level, when a creature fails its saving throw against
|
||||
your Arcane Abjuration feature, the creature is banished for 1 minute (as
|
||||
in the banishment spell, no concentration required) if it isn't on its
|
||||
plane of origin and its challenge rating is at or below a certain
|
||||
threshold, as shown on the Arcane Banishment table.
|
||||
|
||||
5th level : CR 1/2
|
||||
8th level : CR 1
|
||||
11th level : CR 2
|
||||
14th level : CR 3
|
||||
17th level : CR 4
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Arcane Abjuration"
|
||||
source = "Cleric (Arcana Domain)"
|
||||
|
||||
|
||||
class SpellBreaker(Feature):
|
||||
"""Starting at 6th level, when you restore hit points to an ally with a spell
|
||||
of 1st level or higher, you can also end one spell of your choice on that
|
||||
creature. The level of the spell you end must be equal to or lower than the
|
||||
level of the spell slot you use to cast the healing spell
|
||||
|
||||
"""
|
||||
name = "Spell Breaker"
|
||||
source = "Cleric (Arcana Domain)"
|
||||
|
||||
|
||||
class ArcaneMastery(Feature):
|
||||
"""At 17th level, you choose four spells from the wizard spell list, one from
|
||||
each of the following levels: 6th, 7th, 8th, and 9th. You add them to your
|
||||
list of domain spells. Like your other domain spells, they are always
|
||||
prepared and count as cleric spells for you.
|
||||
|
||||
"""
|
||||
name = "Arcane Mastery"
|
||||
source = "Cleric (Arcana Domain)"
|
||||
|
||||
|
||||
# Forge Domain
|
||||
class BlessingOfTheForge(Feature):
|
||||
"""At 1st level, you gain the ability to imbue magic into a weapon or
|
||||
armor. At the end of a long rest, you can touch one nonmagical object that
|
||||
is a suit of armor or a simple or martial weapon. Until the end of your
|
||||
next long rest or until you die, the object becomes a magic item, granting
|
||||
a +1 bonus to AC if it’s armor or a +1 bo— nus to attack and damage rolls
|
||||
if it’s a weapon. Once you use this feature, you can’t use it again until
|
||||
you finish a long rest
|
||||
|
||||
"""
|
||||
name = "Blessing of the Forge"
|
||||
source = "Cleric (Forge Domain)"
|
||||
|
||||
|
||||
class ArtisansBlessing(Feature):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to create simple
|
||||
items. You conduct an hour—long ritual that crafts a nonmagi— cal item that
|
||||
must include some metal: a simple or martial weapon, a suit of armor, ten
|
||||
pieces of ammunition, a set of tools, or another metal Object (see chapter
|
||||
5, “Equipment,” in the Player’s Handbook for examples of these items). The
|
||||
creation is completed at the end of the hour, coalescing in an unoccupied
|
||||
space of your choice on a surface within 5 feet of you. The thing you
|
||||
create can be something that is worth no more than 100 gp.
|
||||
|
||||
As part of this ritual, you must lay out metal, which can include coins,
|
||||
with a value equal to the creation. The metal irretrievably coalesces and
|
||||
transforms into the creation at the ritual’s end, magically forming even
|
||||
nonmetal parts of the creation. The ritual can create a duplicate of a
|
||||
nonmagical item that contains metal, such as a key, if you possess the
|
||||
original during the ritual.
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Artisans Blessing"
|
||||
source = "Cleric (Forge Domain)"
|
||||
|
||||
|
||||
class SoulOfTheForge(Feature):
|
||||
"""Starting at 6th level, your mastery of the forge grants you special
|
||||
abilities:
|
||||
|
||||
-- You gain resistance to fire damage.
|
||||
|
||||
-- While wearing heavy armor, you gain a +1 bonus to AC.
|
||||
|
||||
"""
|
||||
name = "Soul of the Forge"
|
||||
source = "Cleric (Forge Domain)"
|
||||
|
||||
|
||||
class DivineStrikeForge(DivineStrike):
|
||||
"""At 8th level, you gain the ability to infuse your weapon strikes with the
|
||||
fiery power of the forge. Once on each ofyour turns when you hit a creature
|
||||
with a weapon attack, you can cause the attack to deal an extra 1d8 fire
|
||||
damage to the target. When you reach 14th level, the extra damage
|
||||
increases to 2d8
|
||||
|
||||
"""
|
||||
source = "Cleric (Forge Domain)"
|
||||
|
||||
|
||||
class SaintOfForgeAndFire(Feature):
|
||||
"""At 17th level, your blessed affinity with fire and metal becomes more
|
||||
powerful:
|
||||
|
||||
-- You gain immunity to fire damage.
|
||||
|
||||
-- While wearing heavy armor, you have resistance to bludgeoning, piercing,
|
||||
and slashing damage from non-magical attacks
|
||||
|
||||
"""
|
||||
name = "Saint of Forge and Fire"
|
||||
source = "Cleric (Forge Domain)"
|
||||
|
||||
|
||||
# Grave Domain
|
||||
class CircleOfMortality(Feature):
|
||||
"""At 1st level, you gain the ability to manipulate the line between life and
|
||||
death. When you would normally roll one or more dice to restore hit points
|
||||
with a spell to a creature at 0 hit points, you instead use the highest
|
||||
number possible for each die. In addition, you learn the spare the dying
|
||||
cantrip, which doesn’t count against the number of cleric cantrips you
|
||||
know. For you, it has a range of 30 feet, and you can cast it as a bonus
|
||||
action
|
||||
|
||||
"""
|
||||
spells_known = (spells.SpareTheDying,)
|
||||
spells_prepared = (spells.SpareTheDying,)
|
||||
name = "Circle of Mortality"
|
||||
source = "Cleric (Grave Domain)"
|
||||
|
||||
|
||||
class EyesOfTheGrave(Feature):
|
||||
"""At lst level, you gain the ability to occasionally sense the presence of the
|
||||
undead, whose existence is an insult to the natural cycle of life. As an
|
||||
action, you can open your awareness to magically detect undead. Until the
|
||||
end ofyour next turn, you know the location of any undead within 60 feet of
|
||||
you that isn’t behind total cover and that isn’t protected from divination
|
||||
magic.
|
||||
|
||||
This sense doesn’t tell you anything about a creature's capabilities or
|
||||
identity. You can use this feature a number of times equal to your Wisdom
|
||||
modifier (minimum Of once). You regain all expended uses when you finish a
|
||||
long rest
|
||||
|
||||
"""
|
||||
_name = "Eyes of the Grave"
|
||||
source = "Cleric (Grave Domain)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = max(1, self.owner.wisdom.modifier)
|
||||
return self._name + " ({:d}x/LR)".format(num)
|
||||
|
||||
|
||||
class PathToTheGrave(ChannelDivinity):
|
||||
"""Starting at 2nd level, you can use your Channel Divinity to mark another
|
||||
creature’s life force for termination. As an action, you choose one
|
||||
creature you can see within 30 feet of you, cursing it until the end Of
|
||||
your next turn. The next time you or an ally Ofyours hits the cursed
|
||||
creature with an attack, the creature has vulnerability tO all of that
|
||||
attack's damage, and then the curse ends
|
||||
|
||||
"""
|
||||
name = "Channel Divinity: Path to the Grave"
|
||||
source = "Cleric (Grave Domain)"
|
||||
|
||||
|
||||
class SentinelAtDeathsDoor(Feature):
|
||||
"""At 6th level, you gain the ability to impede death’s progress. As a
|
||||
reaction when you or a creature you can see within 30 feet of you suffers a
|
||||
critical hit, you can turn that hit into a normal hit. Any effects
|
||||
triggered by a critical hit are canceled. You can use this feature a
|
||||
number of times equal to your Wisdom modifier (minimum of once). You regain
|
||||
all expended uses when you finish a long rest.
|
||||
|
||||
"""
|
||||
_name = "Sentinel at Death's Door"
|
||||
source = "Cleric (Grave Domain)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = max(1, self.owner.wisdom.modifier)
|
||||
return self._name + " ({:d}x/LR)".format(num)
|
||||
|
||||
|
||||
class KeeperOfSouls(Feature):
|
||||
"""Starting at 17th level. you can seize a trace of vitality from a parting
|
||||
soul and use it to heal the living. When an enemy you can see dies within
|
||||
60 feet of you, you or one creature of your choice that is within 60 feet
|
||||
of you regains hit points equal to the enemy’s number of Hit Dice. You can
|
||||
use this feature only if you aren’t incapacitated. Once you use it, you
|
||||
can't do so again until the start ofyour next turn.
|
||||
|
||||
"""
|
||||
name = "Keeper of Souls"
|
||||
source = "Cleric (Grave Domain)"
|
||||
|
||||
|
||||
@@ -0,0 +1,529 @@
|
||||
from .features import Feature, FeatureSelector
|
||||
from .. import spells
|
||||
|
||||
|
||||
# PHB
|
||||
class WildShape(Feature):
|
||||
"""Starting at 2nd level, you can use your action to magically assume the
|
||||
shape of a beast that you have seen before. You can use this feature
|
||||
twice. You regain expended uses when you finish a short or long rest. Your
|
||||
druid level determines the beasts you can transform into, as shown in the
|
||||
Beast Shapes table. At 2nd level, for example, you can transform into any
|
||||
beast that has a challenge rating of 1/4 or lower that doesn’t have a
|
||||
flying or swimming speed.
|
||||
|
||||
2nd Level: Max CR 1/4, No Flying/Swimming (ex: Wolf)
|
||||
|
||||
4th Level: Max CR 1/2, No Flying (ex: Crocodile)
|
||||
|
||||
8th Level: Max CR 1 (ex: Giant Eagle)
|
||||
|
||||
You can stay in a beast shape for a number of hours equal to half your
|
||||
druid level (rounded down). You then revert to your normal form unless you
|
||||
expend another use of this feature. You can revert to your normal form
|
||||
earlier by using a bonus action on your turn. You automatically revert if
|
||||
you fall unconscious, drop to 0 hit points, or die.
|
||||
|
||||
While you are transformed, the following rules apply:
|
||||
|
||||
-- Your game statistics are replaced by the statistics of the beast, but
|
||||
you retain your alignment, personality, and Intelligence, Wisdom, and
|
||||
Charisma scores. You also retain all of your skill and saving throw
|
||||
proficiencies, in addition to gaining those of the creature. If the
|
||||
creature has the same proficiency as you and the bonus in its stat block is
|
||||
higher than yours, use the creature’s bonus instead of yours. If the
|
||||
creature has any legendary or lair actions, you can't use them.
|
||||
|
||||
-- When you transform, you assume the beast’s hit points and Hit Dice. When
|
||||
you revert to your normal form, you return to the number of hit points you
|
||||
had before you transformed. However, if you revert as a result of dropping
|
||||
to 0 hit points, any excess damage carries over to your normal form. For
|
||||
example, if you take 10 damage in animal form and have only 1 hit point
|
||||
left, you revert and take 9 damage. As long as the excess damage doesn’t
|
||||
reduce your normal form to 0 hit points, you aren’t knocked unconscious.
|
||||
|
||||
-- You can’t cast spells, and your ability to speak or take any action that
|
||||
requires hands is limited to the capabilities of your beast
|
||||
form. Transforming doesn’t break your concentration on a spell you’ve
|
||||
already cast, however, or prevent you from taking actions that are part of
|
||||
a spell, such as call lightning, that you’ve already cast.
|
||||
|
||||
-- You retain the benefit of any features from your class, race, or other
|
||||
source and can use them if the new form is physically capable of doing
|
||||
so. However, you can’t use any of your special senses, such as darkvi-
|
||||
sion, unless your new form also has that sense.
|
||||
|
||||
-- You choose whether your equipment falls to the ground in your space,
|
||||
merges into your new form, or is worn by it. Worn equipment functions as
|
||||
normal, but the DM decides whether it is practical for the new form to wear
|
||||
a piece of equipment, based on the creature’s shape and size. Your
|
||||
equipment doesn’t change size or shape to match the new form, and any
|
||||
equipment that the new form can’t wear must either fall to the ground or
|
||||
merge with it. Equipment that merges with the form has no effect until you
|
||||
leave the form.
|
||||
|
||||
"""
|
||||
_name = "Wild Shape"
|
||||
source = "Druid"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = 2
|
||||
time = self.owner.Druid.level // 2
|
||||
return self._name + " ({:d}x/SR, {:d} hours)".format(num, time)
|
||||
|
||||
|
||||
class TimelessBody(Feature):
|
||||
"""Starting at 18th level, the primal magic that you wield causes you to age
|
||||
more slowly. For every 10 years that pass, your body ages only 1 year.
|
||||
|
||||
"""
|
||||
name = "Timeless Body"
|
||||
source = "Druid"
|
||||
|
||||
|
||||
class BeastSpells(Feature):
|
||||
"""Beginning at 18th level, you can cast many of your druid spells in any
|
||||
shape you assume using Wild Shape. You can perform the somatic and verbal
|
||||
components of a druid spell while in a beast shape, but you aren’t able to
|
||||
provide material components.
|
||||
|
||||
"""
|
||||
name = "Beast Spells"
|
||||
source = "Druid"
|
||||
|
||||
|
||||
class Archdruid(Feature):
|
||||
"""At 20th level, you can use your Wild Shape an unlimited number of times.
|
||||
|
||||
Additionally, you can ignore the verbal and somatic components of your
|
||||
druid spells, as well as any material components that lack a cost and
|
||||
aren’t consumed by a spell. You gain this benefit in both your normal shape
|
||||
and your beast shape from Wild Shape
|
||||
|
||||
"""
|
||||
name = "Archdruid"
|
||||
source = "Druid"
|
||||
|
||||
|
||||
# Circle of the Land
|
||||
class BonusCantrip(Feature):
|
||||
"""When you choose this circle at 2nd level, you learn one additional druid
|
||||
cantrip of your choice
|
||||
|
||||
"""
|
||||
name = "Bonus Cantrip"
|
||||
source = "Druid (Circle of the Land)"
|
||||
|
||||
|
||||
class NaturalRecovery(Feature):
|
||||
"""Starting at 2nd level, you can regain some of your magical energy by
|
||||
sitting in meditation and communing with nature. During a short rest, you
|
||||
choose expended spell slots to recover. The spell slots can have a combined
|
||||
level that is equal to or less than half your druid level (rounded up), and
|
||||
none of the slots can be 6th level or higher. You can’t use this feature
|
||||
again until you finish a long rest.
|
||||
|
||||
For example, when you are a 4th-level druid, you can recover up to two
|
||||
levels worth of spell slots. You can recover either a 2nd-level slot or two
|
||||
1st-level slots.
|
||||
|
||||
"""
|
||||
name = "Natural Recovery"
|
||||
source = "Druid (Circle of the Land)"
|
||||
|
||||
|
||||
class _CircleSpells(Feature):
|
||||
"""Your mystical connection to the land infuses you with the ability to cast
|
||||
certain spells. At 3rd, 5th, 7th, and 9th level you gain access to circle
|
||||
spells connected to the land where you became a druid. Choose that
|
||||
land—arctic, coast, desert, forest, grassland, mountain, swamp, or
|
||||
Underdark—and consult the associated list of spells.
|
||||
|
||||
Once you gain access to a circle spell, you always have it prepared, and it
|
||||
doesn’t count against the number of spells you can prepare each day. If you
|
||||
gain access to a spell that doesn’t appear on the druid spell list, the
|
||||
spell is nonetheless a druid spell for you.
|
||||
|
||||
"""
|
||||
_name = "Select One"
|
||||
source = "Druid (Circle of the Land)"
|
||||
_spells = {3: [], 5: [], 7: [], 9: []}
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return "Circle Spells ({:s})".format(self._name)
|
||||
|
||||
@property
|
||||
def spells_prepared(self):
|
||||
level = self.owner.Druid.level
|
||||
my_spells = []
|
||||
for lvl, sps in self._spells.items():
|
||||
if level >= lvl:
|
||||
my_spells.extend(sps)
|
||||
return my_spells
|
||||
|
||||
@property
|
||||
def spells_known(self):
|
||||
return self.spells_prepared
|
||||
|
||||
|
||||
class ArcticSpells(_CircleSpells):
|
||||
_spells = {3: [spells.HoldPerson, spells.SpikeGrowth],
|
||||
5: [spells.SleetStorm, spells.Slow],
|
||||
7: [spells.FreedomOfMovement, spells.IceStorm],
|
||||
9: [spells.CommuneWithNature, spells.ConeOfCold]}
|
||||
|
||||
|
||||
class CoastSpells(_CircleSpells):
|
||||
_spells = {3: [spells.MirrorImage, spells.MistyStep],
|
||||
5: [spells.WaterBreathing, spells.WaterWalk],
|
||||
7: [spells.ControlWater, spells.FreedomOfMovement],
|
||||
9: [spells.ConjureElemental, spells.Scrying]}
|
||||
|
||||
|
||||
class DesertSpells(_CircleSpells):
|
||||
_spells = {3: [spells.Blur, spells.Silence],
|
||||
5: [spells.CreateFoodAndWater, spells.ProtectionFromEnergy],
|
||||
7: [spells.Blight, spells.HallucinatoryTerrain],
|
||||
9: [spells.InsectPlague, spells.WallOfStone]}
|
||||
|
||||
|
||||
class ForestSpells(_CircleSpells):
|
||||
_spells = {3: [spells.Barkskin, spells.SpiderClimb],
|
||||
5: [spells.CallLightning, spells.PlantGrowth],
|
||||
7: [spells.Divination, spells.FreedomOfMovement],
|
||||
9: [spells.CommuneWithNature, spells.TreeStride]}
|
||||
|
||||
|
||||
class GrasslandSpells(_CircleSpells):
|
||||
_spells = {3: [spells.Invisibility, spells.PassWithoutTrace],
|
||||
5: [spells.Daylight, spells.Haste],
|
||||
7: [spells.Divination, spells.FreedomOfMovement],
|
||||
9: [spells.Dream, spells.InsectPlague]}
|
||||
|
||||
|
||||
class MountainSpells(_CircleSpells):
|
||||
_spells = {3: [spells.SpiderClimb, spells.SpikeGrowth],
|
||||
5: [spells.LightningBolt, spells.MeldIntoStone],
|
||||
7: [spells.StoneShape, spells.Stoneskin],
|
||||
9: [spells.Passwall, spells.WallOfStone]}
|
||||
|
||||
|
||||
class SwampSpells(_CircleSpells):
|
||||
_spells = {3: [spells.Darkness, spells.MelfsAcidArrow],
|
||||
5: [spells.WaterWalk, spells.StinkingCloud],
|
||||
7: [spells.FreedomOfMovement, spells.LocateCreature],
|
||||
9: [spells.InsectPlague, spells.Scrying]}
|
||||
|
||||
|
||||
class UnderdarkSpells(_CircleSpells):
|
||||
_spells = {3: [spells.SpiderClimb, spells.Web],
|
||||
5: [spells.GaseousForm, spells.StinkingCloud],
|
||||
7: [spells.GreaterInvisibility, spells.StoneShape],
|
||||
9: [spells.Cloudkill, spells.InsectPlague]}
|
||||
|
||||
|
||||
class CircleSpells(FeatureSelector, _CircleSpells):
|
||||
"""
|
||||
Select a land where you became a druid in feature_choices in your .py file:
|
||||
|
||||
arctic
|
||||
|
||||
coast
|
||||
|
||||
desert
|
||||
|
||||
forest
|
||||
|
||||
grassland
|
||||
|
||||
mountain
|
||||
|
||||
swamp
|
||||
|
||||
underdark
|
||||
|
||||
"""
|
||||
options = {'arctic': ArcticSpells,
|
||||
'coast': CoastSpells,
|
||||
'desert': DesertSpells,
|
||||
'forest': ForestSpells,
|
||||
'grassland': GrasslandSpells,
|
||||
'mountain': MountainSpells,
|
||||
'swamp': SwampSpells,
|
||||
'underdark': UnderdarkSpells}
|
||||
_name = "(Select One)"
|
||||
|
||||
|
||||
class LandsStride(Feature):
|
||||
"""Starting at 6th level, moving through nonmagical difficult terrain costs
|
||||
you no extra movement. You can also pass through nonmagical plants without
|
||||
being slowed by them and without taking damage from them if they have
|
||||
thorns, spines, or a similar hazard. In addition, you have advantage on
|
||||
saving throws against plants that are magically created or manipulated to
|
||||
impede movement, such those created by the entangle spell.
|
||||
|
||||
"""
|
||||
name = "Land's Stride"
|
||||
source = "Druid (Circle of the Land)"
|
||||
|
||||
|
||||
class NaturesWard(Feature):
|
||||
"""When you reach 10th level, you can’t be charmed or frightened by elementals
|
||||
or fey, and you are immune to poison and disease
|
||||
|
||||
"""
|
||||
name = "Nature's Ward"
|
||||
source = "Druid (Circle of the Land)"
|
||||
|
||||
|
||||
class NaturesSanctuary(Feature):
|
||||
"""When you reach 14th level, creatures of the natural world sense your
|
||||
connection to nature and become hesitant to attack you. When a beast or
|
||||
plant creature attacks you, that creature must make a Wisdom saving throw
|
||||
against your druid spell save DC. On a failed save, the creature must
|
||||
choose a different target, or the attack automatically misses. On a
|
||||
successful save, the creature is immune to this effect for 24 hours. The
|
||||
creature is aware of this effect before it makes its attack against you
|
||||
|
||||
"""
|
||||
name = "Nature's Sanctuary"
|
||||
source = "Druid (Circle of the Land)"
|
||||
|
||||
|
||||
# Circle of the Moon
|
||||
class CombatWildShape(Feature):
|
||||
"""When you choose this circle at 2nd level, you gain the ability to use Wild
|
||||
Shape on your turn as a bonus action, rather than as an
|
||||
action. Additionally, while you are transformed by Wild Shape, you can use
|
||||
a bonus action to expend one spell slot to regain 1d8 hit points per level
|
||||
of the spell slot expended.
|
||||
|
||||
"""
|
||||
name = "Combat Wild Shape"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
|
||||
class CircleForms(Feature):
|
||||
"""The rites of your circle grant you the ability to transform into more
|
||||
dangerous animal forms. Starting at 2nd level, you can use your Wild Shape
|
||||
to transform into a beast with a challenge rating as high as 1 (you ignore
|
||||
the Max. CR column of the Beast Shapes table, but must abide by the other
|
||||
limitations there). Starting at 6th level, you can transform into a beast
|
||||
with a challenge rating as high as your druid level divided by 3, rounded
|
||||
down
|
||||
|
||||
"""
|
||||
_name = "Circle Forms"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
level = self.owner.Druid.level
|
||||
return self._name + ' (CR {:d})'.format(max(1, level//3))
|
||||
|
||||
|
||||
class PrimalStrike(Feature):
|
||||
"""Starting at 6th level, your attacks in beast form count as magical for the
|
||||
purpose of overcoming resistance and immunity to nonmagical attacks and
|
||||
damage.
|
||||
|
||||
"""
|
||||
name = "Primal Strike"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
|
||||
class ElementalWildShape(Feature):
|
||||
"""At 10th level, you can expend two uses of Wild Shape at the same time to
|
||||
transform into an air elemental, an earth elemental, a fire elemental, or a
|
||||
water elemental.
|
||||
|
||||
"""
|
||||
name = "Elemental Wild Shape"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
|
||||
class ThousandForms(Feature):
|
||||
"""By 14th level, you have learned to use magic to alter your physical form in
|
||||
more subtle ways. You can cast the alter self spell at will.
|
||||
|
||||
"""
|
||||
name = "Thousand Forms"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
spells_known = (spells.AlterSelf,)
|
||||
spells_prepared = (spells.AlterSelf,)
|
||||
|
||||
|
||||
# Circle of Dreams
|
||||
class BalmOfTheSummerCourt(Feature):
|
||||
"""At 2nd level, you become imbued with the blessings of the Summer Court. You
|
||||
are a font of energy that offers respite from injuries. You have a pool of
|
||||
fey energy represented by a number of C168 equal to your druid level. As
|
||||
a bonus action, you can choose one creature you can see within 120 feet
|
||||
ofyou and spend a number of those dice equal to halfyour druid level or
|
||||
less. Roll the spent dice and add them together. The target regains a
|
||||
number of hit points equal to the total. The target also gains 1 temporary
|
||||
hit point per die spent. You regain all expended dice when you finish a
|
||||
long rest.
|
||||
|
||||
"""
|
||||
_name = "Balm Of The Summer Court"
|
||||
source = "Druid (Circle of Dreams)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self._name + " ({:d}x d6)".format(self.owner.Druid.level)
|
||||
|
||||
|
||||
class HearthOfMoonlightAndShadow(Feature):
|
||||
"""At 6th level, home can be wherever you are. During a short or long rest,
|
||||
you can invoke the shadowy power of the Gleaming Court to help guard your
|
||||
respite. At the start of the rest, you touch a point in space, and an
|
||||
invisible, 30-foot—radius sphere of magic appears, centered on that
|
||||
point. Total cover blocks the sphere.
|
||||
|
||||
While within the sphere, you and your allies gain a +5 bonus to Dexterity
|
||||
(Stealth) and Wisdom (Perception) checks, and any light from open flames in
|
||||
the sphere (a campfire, torches, or the like) isn’t visible outside it. The
|
||||
sphere vanishes at the end of the rest or when you leave the sphere
|
||||
|
||||
"""
|
||||
name = "Hearth of Moonlight and Shadow"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
|
||||
class HiddenPaths(Feature):
|
||||
"""Starting at 10th level, you can use the hidden, magical pathways that some
|
||||
fey use to traverse space in the blink of an eye. As a bonus action on your
|
||||
turn, you can teleport up to 60 feet to an unoccupied space you can
|
||||
see.
|
||||
|
||||
Alternatively, you can use your action to teleport one willing creature you
|
||||
touch up to 30 feet to an unoccupied space you can see. You can use this
|
||||
feature a number of times equal to your Wisdom modifier (minimum of once),
|
||||
and you regain all expended uses of it when you finish a long rest
|
||||
|
||||
"""
|
||||
name = "Hidden Paths"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
|
||||
class WalkerInDreams(Feature):
|
||||
"""At 14th level, the magic of the Feywild grants you the ability to travel
|
||||
mentally or physically through dreamlands. When you finish a short rest,
|
||||
you can cast one of the following spells, without expending a spell slot or
|
||||
requiring material components: dream (with you as the messenger),
|
||||
scrying, or teleportation circle.
|
||||
|
||||
This use of teleportation circle is special. Rather than opening a portal
|
||||
to a permanent teleportation circle, it opens a portal to the last location
|
||||
where you finished a long rest on your current plane of existence. If you
|
||||
haven*t taken a long rest on your current plane, the spell fails but isn’t
|
||||
wasted. Once you use this feature, you can’t use it again until you finish
|
||||
a long rest.
|
||||
|
||||
"""
|
||||
name = "Walker in Dreams"
|
||||
source = "Druid (Circle of the Moon)"
|
||||
|
||||
|
||||
# Circle of the Shepherd
|
||||
class SpeechOfTheWoods(Feature):
|
||||
"""At 2nd level, you gain the ability to converse with beasts and many fey. You
|
||||
learn to speak, read, and write Sylvan. In addition, beasts can
|
||||
understand your speech, and you gain the ability to decipher their noises
|
||||
and motions. Most beasts lack the intelligence to convey or understand
|
||||
sophisticated concepts, but a friendly beast could relay what it has seen
|
||||
or heard in the recent past. This ability doesn’t grant you friendship with
|
||||
beasts, though you can combine this ability with gifts to curry favor with
|
||||
them as you would with any nonplayer character.
|
||||
|
||||
"""
|
||||
name = "Speech of the Woods"
|
||||
source = "Druid (Circle of the Shepherd)"
|
||||
|
||||
|
||||
class SpiritTotem(Feature):
|
||||
"""Starting at 2nd level, you can call forth nature spirits to influence the
|
||||
world around you. As a bonus action, you can magically summon an
|
||||
incorporeal spirit to a point you can see within 60 feet of you. The spirit
|
||||
creates an aura in a 30-foot radius around that point. It counts as neither
|
||||
a creature nor an object, though it has the spectral appearance of the
|
||||
creature it. represents.
|
||||
|
||||
As a bonus action, you can move the spirit up to 60 feet to a point you can
|
||||
see. The spirit persists for 1 minute or until you’re incapacitated. Once
|
||||
you use this feature, you can’t use it again until you finish a short or
|
||||
long rest. The effect of the spirit’s aura depends on the type of spirit
|
||||
you summon from the options below.
|
||||
|
||||
**Bear Spirit**: The bear spirit grants you and your allies its might and
|
||||
endurance. Each creature ofyour choice in the aura when the spirit appears
|
||||
gains temporary hit points equal to 5 + your druid level. In addition, you
|
||||
and your allies gain advantage on Strength checks and Strength saving
|
||||
throws while in the aura.
|
||||
|
||||
**Hawk Spirit**: The hawk spirit is a consummate hunter, aiding you and
|
||||
your allies with its keen sight. When a creature makes an attack roll
|
||||
against a target in the spirit’s aura, you can use your reaction to grant
|
||||
advantage to that attack roll. In addition, you and your allies have
|
||||
advantage on Wisdom (Perception) checks while in the aura
|
||||
|
||||
**Unicorn Spirit**: The unicorn spirit lends its protection to those
|
||||
nearby. You and your allies gain advantage on all ability checks made to
|
||||
detect creatures in the spirit’s aura. In addition. if you cast a spell
|
||||
using a spell slot that restores hit points to any creature inside or
|
||||
outside the aura, each creature of your choice in the aura also regains hit
|
||||
points equal to your druid level.
|
||||
|
||||
"""
|
||||
name = "Spirit Totem"
|
||||
source = "Druid (Circle of the Shepherd)"
|
||||
|
||||
|
||||
class MightySummoner(Feature):
|
||||
"""Starting at 6th level, beasts and fey that you conjure are more resilient
|
||||
than normal. Any beast or fey summoned or created by a spell that you cast
|
||||
gains the. following benefits:
|
||||
|
||||
-- The creature appears with more hit points than normal: 2 extra hit
|
||||
points per Hit Die it has.
|
||||
|
||||
-- The damage from its natural weapons is considered magical for the
|
||||
purpose of overcoming immunity and resistance to nonmagical attacks and
|
||||
damage.
|
||||
|
||||
"""
|
||||
name = "Mighty Summoner"
|
||||
source = "Druid (Circle of the Shepherd)"
|
||||
|
||||
|
||||
class GuardianSpirit(Feature):
|
||||
"""Beginning at 10th level, your Spirit Totem safeguards the beasts and fey
|
||||
that you call forth with your magic. When a beast or fey that you summoned
|
||||
or created with a spell ends its turn in your Spirit Totem aura, that crea—
|
||||
ture regains a number of hit points equal to halfyour druid level.
|
||||
|
||||
"""
|
||||
name = "Guardian Spirit"
|
||||
source = "Druid (Circle of the Shepherd)"
|
||||
|
||||
|
||||
class FaithfulSummons(Feature):
|
||||
"""Starting at 14th level, the nature spirits you commune with protect you
|
||||
when you are the most defenseless. Ifyou are reduced to 0 hit points or are
|
||||
incapacitated against your will, you can immediately gain the benefits of
|
||||
conjure animals as if it were cast using a 9th-level spell slot. It summons
|
||||
four beasts of your choice that are challenge rating 2 or lower. The
|
||||
conjured beasts appear within 20 feet of you. If they receive no commands
|
||||
from you, they protect you from harm and attack your foes. The spell lasts
|
||||
for 1 hour, requiring no concentration, or until you dismiss it (no action
|
||||
required). Once you use this feature, you can’t use it again until you
|
||||
finish a long rest
|
||||
|
||||
"""
|
||||
name = "Faithful Summons"
|
||||
source = "Druid (Circle of the Shepherd)"
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
from .. import weapons
|
||||
|
||||
|
||||
|
||||
@@ -542,6 +542,454 @@ class ImprovedWarMagic(Feature):
|
||||
source = "Fighter (Eldritch Knight)"
|
||||
|
||||
|
||||
# Purple Dragon Knight
|
||||
class RallyingCry(Feature):
|
||||
"""When you choose this archetype at 3rd level, you learn how to inspire your
|
||||
allies to fight on past their injuries. When you use your Second Wind
|
||||
feature, you can choose up to three creatures within 60 feet of you that
|
||||
are allied with you. Each one regains hit points equal to your fighter
|
||||
level, provided that the creature can see or hear you
|
||||
|
||||
"""
|
||||
name = "Rallying Cry"
|
||||
source = "Fighter (Purple Dragon Knight)"
|
||||
|
||||
|
||||
class RoyalEnvoy(Feature):
|
||||
"""A Purple Dragon knight serves as an envoy of the Cormyrean crown. Knights
|
||||
of high standing are expected to conduct themselves with grace.
|
||||
|
||||
At 7th level, you gain proficiency in the Persuasion skill. If you are
|
||||
already proficient in it, you gain proficiency in one of the following
|
||||
skills of your choice: Animal Handling, Insight, Intimidation, or
|
||||
Performance.
|
||||
|
||||
Your proficiency bonus is doubled for any ability check you make that uses
|
||||
Persuasion. You receive this benefit regardless of the skill proficiency
|
||||
you gain from this feature
|
||||
|
||||
"""
|
||||
name = "Royal Envoy"
|
||||
source = "Fighter (Purple Dragon Knight)"
|
||||
|
||||
def __init__(self, owner=None):
|
||||
super().__init__(owner=owner)
|
||||
if 'persuasion' not in self.owner.skill_proficiencies:
|
||||
self.owner.skill_proficiencies.append('persuasion')
|
||||
if 'persuasion' not in self.owner.skill_expertise:
|
||||
self.owner.skill_expertise.append('persuasion')
|
||||
|
||||
|
||||
class InspiringSurge(Feature):
|
||||
"""Starting at 10th level, when you use your Action Surge feature , you can
|
||||
choose one creature within 60 feet of you that is allied with you. That
|
||||
creature can make one melee or ranged weapon attack with its reaction, pro-
|
||||
vided that it can see or hear you. Starting at 18th level, you can choose
|
||||
two allies within 60 feet of you, rather than one.
|
||||
|
||||
"""
|
||||
name = "Inspiring Surge"
|
||||
source = "Fighter (Purple Dragon Knight)"
|
||||
|
||||
|
||||
class Bulwark(Feature):
|
||||
"""Beginning at 15th level, you can extend the benefit of your Indomitable
|
||||
feature to an ally. When you decide to use Indomitable to reroll an
|
||||
Intelligence, a Wisdom, or a Charisma saving throw and you aren't
|
||||
incapacitated, you can choose one ally within 60 feet of you that also
|
||||
failed its saving throw against the same effect. If that creature can see
|
||||
or hear you, it can reroll its saving throw and must use the new roll
|
||||
|
||||
"""
|
||||
name = "Bulwark"
|
||||
source = "Fighter (Purple Dragon Knight)"
|
||||
|
||||
|
||||
# Arcane Archer
|
||||
class ArcaneArcherLore(Feature):
|
||||
"""At 3rd level, you learn magical theory or some of the secrets of
|
||||
nature—typical for practitioners of this elven martial tradition. You
|
||||
choose to gain proficiency in ei— ther the Arcana or the Nature skill, and
|
||||
you choose to learn either the prestidigr'tation or the drufdcraft cantrip
|
||||
|
||||
"""
|
||||
name = "Arcane Archer Lore"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class ArcaneShot(Feature):
|
||||
"""At 3rd level, you learn to unleash special magical effects with some of
|
||||
your shots. When you gain this feature, you learn two Arcane Shot options
|
||||
of your choice (see “Arcane Shot Options” below).
|
||||
|
||||
Add all Arcane Shot options under "features" in your .py file
|
||||
|
||||
Once per turn when you fire a magic arrow from a shortbow or longbow as
|
||||
part of the Attack action, you can apply one of your Arcane Shot options to
|
||||
that arrow. You decide to use the option when the arrow hits a creature,
|
||||
unless the option doesn’t involve an attack roll. You have two uses of this
|
||||
ability, and you regain all expended uses of it when you finish a short or
|
||||
long rest.
|
||||
|
||||
You gain an additional Arcane Shot option of your choice when you reach
|
||||
certain levels in this class: 7th, 10th, 15th, and 18th level. Each option
|
||||
also improves when you become an 18th—level fighter
|
||||
|
||||
If an option requires a saving throw, your Arcane Shot save DC equals 8 +
|
||||
your proficiency bonus + your Intelligence modifier
|
||||
|
||||
"""
|
||||
name = "Arcane Shot (2x/SR)"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class MagicArrow(Feature):
|
||||
"""At 7th level, you gain the ability to infuse arrows with magic. Whenever
|
||||
you fire a nonmagical arrow from a shortbow or longbow, you can make it
|
||||
magical for the purpose of overcoming resistance and immunity to non-
|
||||
magical attacks and damage. The magic fades from the arrow immediately
|
||||
after it hits or misses its target.
|
||||
|
||||
"""
|
||||
name = "Magic Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class CurvingShot(Feature):
|
||||
"""At 7th level, you learn how to direct an errant arrow toward a new
|
||||
target. When you make an attack roll with a magic arrow and miss, you can
|
||||
use a bonus action to reroll the attack roll against a different target
|
||||
within 60 feet of the original target
|
||||
|
||||
"""
|
||||
name = "Curving Shot"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class EverReadyShot(Feature):
|
||||
"""Starting at 15th level, your magical archery is available whenever battle
|
||||
starts. If you roll initiative and have no uses of Arcane Shot remaining,
|
||||
you regain one use of it.
|
||||
|
||||
"""
|
||||
name = "Ever-Ready Shot"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class BanishingArrow(Feature):
|
||||
"""You use abjuration magic to try to temporarily banish your target to a
|
||||
harmless location in the Feywild. The creature hit by the arrow must also
|
||||
succeed on a Charisma saving throw or be banished. While banished in this
|
||||
way, the target’s speed is 0, and it is incapacitated. At the end of its
|
||||
next turn, the target reappears in the Space it vacated or in the nearest
|
||||
unoccupied space if that space is occupied.
|
||||
|
||||
After you reach 18th level in this class, a target also takes 2d6 force
|
||||
damage when the arrow hits it.
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Banishing Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class BeguilingArrow(Feature):
|
||||
"""Your enchantment magic causes this arrow to temporarily beguile its
|
||||
target. The creature hit by the arrow takes an extra 2d6 psychic damage,
|
||||
and choose one ofyour allies within 30 feet of the target. The target must
|
||||
succeed on a Wisdom saving throw, or it is charmed by the chosen ally until
|
||||
the start ofyour next turn. This effect ends early if the chosen ally at—
|
||||
tacks the charmed target, deals damage to it, or forces it to make a saving
|
||||
throw. The psychic damage increases to 4d6 when you reach 18th level in
|
||||
this class.
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Beguiling Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class BurstingArrow(Feature):
|
||||
"""You imbue your arrow with force energy drawn from the school of
|
||||
evocation. The energy detonates after your attack. Immediately after the
|
||||
ar— row hits the creature, the target and all other creatures within 10
|
||||
feet of it take 2d6 force damage each. The force damage increases to 4d6
|
||||
when you reach 18th level in this class
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Bursting Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class EnfeeblingArrow(Feature):
|
||||
"""You weave necromantic magic into your arrow. The creature hit by the arrow
|
||||
takes an extra 2d6 necrotic damage. The target must also succeed on a
|
||||
Constitution saving throw, or the damage dealt by its weapon attacks is
|
||||
halved until the start of your next turn. The necrotic damage increases to
|
||||
4d6 when you reach 18th level in this class.
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Enfeebling Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class GraspingArrow(Feature):
|
||||
"""When this arrow strikes its target, conjuration magic creates grasping,
|
||||
poisonous brams bles, which wrap around the target. The creature hit by the
|
||||
arrow takes an extra 2(16 poison damage, its speed is reduced by 10 feet,
|
||||
and it takes 2d6 slashing dam— age the first time on each turn it moves 1
|
||||
foot or more without teleporting. The target or any creature that can reach
|
||||
it can use its action to remove the brambles with a successful Strength
|
||||
(Athletics) check against your Arcane Shot save DC. Otherwise, the
|
||||
brambles last for 1 minute or until you use this option again. The poison
|
||||
damage and slashing damage both increase to 4d6 when you reach 18th level
|
||||
in this class
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Grasping Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class PiercingArrow(Feature):
|
||||
"""You use transmutation magic to give your arrow an ethereal quality. When
|
||||
you use this option, you don’t make an attack roll for the attack. Instead,
|
||||
the arrow shoots forward in a line, which is 1 foot wide and 30 feet long,
|
||||
before disappearing. The arrow passes harmlessly through objects, ignoring
|
||||
cover. Each creature in that line must make a Dexterity saving throw. On a
|
||||
failed save, a creature takes damage as if it were hit by the arrow, plus
|
||||
an extra 1d6 piercing damage. On a successful save, a target takes half as
|
||||
much damage. The piercing damage increases to 2d6 when you reach 18th level
|
||||
in this class.
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Piercing Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class SeekingArrow(Feature):
|
||||
"""Using divination magic, you grant your arrow the ability to seek out a
|
||||
target. When you use this option, you don’t make an attack roll for the
|
||||
attack. Instead, choose one creature you have seen in the past minute. The
|
||||
arrow flies toward that creature, moving around corners if necessary and
|
||||
ignoring three-quarters cover and half cover. If the target is within the
|
||||
weapon’s range and there is a path large enough for the arrow to travel to
|
||||
the target, the target must make a Dexterity saving throw. Otherwise, the
|
||||
arrow disappears after traveling as far as it can. On a failed save, the
|
||||
target takes damage as if it were hit by the arrow, plus an extra 1d6 force
|
||||
damage, and you learn the target’s current location. On a successful save,
|
||||
the target takes half as much damage, and you don’t learn its location. The
|
||||
force damage increases to 2d6 when you reach 18th level in this class.
|
||||
|
||||
"""
|
||||
name = "Arcane Shot: Seeking Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
class ShadowArrow(Feature):
|
||||
"""You weave illusion magic into your arrow, causing it to occlude your fees
|
||||
vision with shadows. The creature hit by the arrow takes an extra 2d6
|
||||
psychic damage, and it must succeed on a Wisdom saving throw or be unable
|
||||
to see anything farther than 5 feet away until the start ofyour next
|
||||
turn. The psychic damage increases to 4d6 when you reach 18th level in this
|
||||
class
|
||||
|
||||
"""
|
||||
name = "Shadow Arrow"
|
||||
source = "Fighter (Arcane Archer)"
|
||||
|
||||
|
||||
# Cavalier
|
||||
class BonusProficiencyCavalier(Feature):
|
||||
"""When you choose this archetype at 3rd level, you gain proficiency in one of
|
||||
the following skills of your choice: Animal Handling, History, Insight,
|
||||
Performance, or Persuasion. Alternatively, you learn one language of your
|
||||
choice.
|
||||
|
||||
"""
|
||||
name = "Bonus Proficiency"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
|
||||
class BornToTheSaddle(Feature):
|
||||
"""Starting at 3rd level, your mastery as a rider becomes apparent. You have
|
||||
advantage on saving throws made to avoid falling off your mount. Ifyou fall
|
||||
off your mount and descend no more than 10 feet, you can land on your feet
|
||||
if you’re not incapacitated. Finally, mounting or dismounting a creature
|
||||
costs you only 5 feet of movement, rather than half your speed.
|
||||
|
||||
"""
|
||||
name = "Born to the Saddle"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
|
||||
class UnwaveringMark(Feature):
|
||||
"""Starting at 3rd level, you can menace your foe-s, foiling their attacks and
|
||||
punishing them for harming others. When you hit a creature with a melee
|
||||
weapon attack, you can mark the creature until the end of your next
|
||||
turn. This effect ends early ifyou are incapacitated or you die, or if
|
||||
someone else marks the creature.
|
||||
|
||||
While it is within 5 feet of you, a creature marked by you has disadvantage
|
||||
on any attack roll that doesn’t target you. In addition, if a creature
|
||||
marked by you deals damage to anyone other than you, you can make a special
|
||||
melee weapon attack against the marked creature as a bonus action on your
|
||||
next turn. You have advantage on the attack roll, and if it hits, the
|
||||
attacks weapon deals extra damage to the target equal to half your fighter
|
||||
level.
|
||||
|
||||
Regardless of the number of creatures you mark, you can make this special
|
||||
attack a number of times equal to your Strength modifier (minimum of once),
|
||||
and you regain all expended uses of it when you finish a long rest
|
||||
|
||||
"""
|
||||
_name = "Unwavering Mark"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = max(1, self.owner.strength.modifier)
|
||||
return self._name + ' ({:d}x/LR)'.format(num)
|
||||
|
||||
|
||||
class WardingManeuver(Feature):
|
||||
"""At 7th level, you learn to fend off strikes directed at you, your mount, or
|
||||
other creatures nearby. If you or a creature you can see within 5 feet
|
||||
of you is hit by an attack, you can roll ld8 as a reaction if you’re
|
||||
wielding a melee weapon or a shield. Roll the die, and add the number
|
||||
rolled to the target’s AC against that attack. If the attack still hits,
|
||||
the target has resistance against the attack’s damage.
|
||||
|
||||
You can use this feature a number of times equal to your Constitution
|
||||
modifier (minimum of once), and you regain all expended uses of it when you
|
||||
finish a long rest
|
||||
|
||||
"""
|
||||
_name = "Warding Maneuver"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = max(1, self.owner.constitution.modifier)
|
||||
return self._name + ' ({:d}x/LR)'.format(num)
|
||||
|
||||
|
||||
class HoldTheLine(Feature):
|
||||
"""At 10th level, you become a master of locking down your enemies. Creatures
|
||||
provoke an opportunity attack from you when they move 5 feet or more while
|
||||
within your reach, and if you hit a creature with an opportunity attack,
|
||||
the target’s speed is reduced to 0 until the end of the current turn.
|
||||
|
||||
"""
|
||||
name = "Hold the Line"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
|
||||
class FerociousCharger(Feature):
|
||||
"""Starting at 15th level, you can run down your foes, whether you’re mounted
|
||||
or not. If you move at least 10 feet in a straight line right before
|
||||
attacking a creature and you hit it with the attack, that target must
|
||||
succeed on a Strength saving throw (DC 8 + your proficiency bonus + your
|
||||
Strength modifier) or be knocked prone. You can use this feature only once
|
||||
on each of your turns
|
||||
|
||||
"""
|
||||
name = "Ferocious Charger"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
|
||||
class VigilantDefender(Feature):
|
||||
"""Starting at 18th level, you respond to danger with extraordinary
|
||||
vigilance. In combat, you get a special reaction that you can take once on
|
||||
every creature’s turn, except your turn. You can use this special reaction
|
||||
only to make an opportunity attack, and you can’t use it on the same turn
|
||||
that you take your normal reaction
|
||||
|
||||
"""
|
||||
name = "Vigiland Defender"
|
||||
source = "Fighter (Cavalier)"
|
||||
|
||||
|
||||
# Samurai
|
||||
class BonusProficiencySamurai(Feature):
|
||||
"""When you choose this archetype at 3rd level, you gain proficiency in one of
|
||||
the following skills ofyour choice: History, Insight, Performance, or
|
||||
Persuasion. Alterna— tively, you learn one language of your choice.
|
||||
|
||||
"""
|
||||
name = "Bonus Proficiency"
|
||||
source = "Fighter (Samurai)"
|
||||
|
||||
|
||||
class FightingSpirit(Feature):
|
||||
"""Starting at 3rd level, your intensity in battle can shield you and help you
|
||||
strike true. As a bonus action on your turn, you can give yourself
|
||||
advantage on weapon attack rolls until the end of the current turn. When
|
||||
you do so, you also gain 5 temporary hit points. The number of temporary
|
||||
hit points increases when you reach certain levels in this class,
|
||||
increasing to 10 at 10th level and 15 at 15th level. You can use this
|
||||
feature three times, and you regain all expended uses of it when you finish
|
||||
a long rest.
|
||||
|
||||
"""
|
||||
name = "Fighting Spirit (3x/LR)"
|
||||
source = "Fighter (Samurai)"
|
||||
|
||||
|
||||
class ElegantCourtier(Feature):
|
||||
"""Starting at 7th level, your discipline and attention to de— tail allow you
|
||||
to excel in social situations. Whenever you make a Charisma (Persuasion)
|
||||
check, you gain a bonus to the check equal to your Wisdom modifier. Your
|
||||
self-control also causes you to gain proficiency in Wisdom saving
|
||||
throws. If you already have this proficiency, you instead gain proficiency
|
||||
in Intelligence or Charisma saving throws (your choice).
|
||||
|
||||
"""
|
||||
name = "Elegant Courtier"
|
||||
source = "Fighter (Samurai)"
|
||||
|
||||
def __init__(self, owner=None):
|
||||
super().__init__(owner=owner)
|
||||
if 'wisdom' not in self.owner.primary_class.saving_throw_proficiencies:
|
||||
self.owner.primary_class.saving_throw_proficiencies += ('wisdom',)
|
||||
else:
|
||||
self.owner.primary_class.saving_throw_proficiencies += ('intelligence',)
|
||||
|
||||
|
||||
class TirelessSpirit(Feature):
|
||||
"""Starting at 10th level, when you roll initiative and have no uses of
|
||||
Fighting Spirit remaining, you regain one use.
|
||||
|
||||
"""
|
||||
name = "Tireless Spirit"
|
||||
source = "Fighter (Samurai)"
|
||||
|
||||
|
||||
class RapidStrike(Feature):
|
||||
"""Starting at 15th level, you learn to trade accuracy for swift strikes. If
|
||||
you take the Attack action on your turn and have advantage on an attack
|
||||
roll against one of the targets, you can forgo the advantage for that roll
|
||||
to make an additional weapon attack against that target, as part of the
|
||||
same action. You can do so no more than once per turn
|
||||
|
||||
"""
|
||||
name = "Rapid Strike"
|
||||
source = "Fighter (Samurai)"
|
||||
|
||||
|
||||
class StrengthBeforeDeath(Feature):
|
||||
"""Starting at 18th level, your fighting spirit can delay the grasp of
|
||||
death. If you take damage that reduces you to 0 hit points and doesn’t kill
|
||||
you outright, you can use your reaction to delay falling unconscious, and
|
||||
you can immediately take an extra turn, interrupting the current
|
||||
turn. While you have 0 hit points during that extra turn, taking damage
|
||||
causes death saving throw failures as normal, and three death saving throw
|
||||
failures can still kill you. When the extra turn ends, you fall unconscious
|
||||
ifyou still have 0 hit points. Once you use this feature, you can’t use it
|
||||
again until you finish a long rest.
|
||||
|
||||
"""
|
||||
name = "Strength Before Death"
|
||||
source = "Fighter (Samurai)"
|
||||
|
||||
|
||||
# Gunslinger
|
||||
class Gunsmith(Feature):
|
||||
"""Upon choosing this archetype at 3rd level, you gain proficiency with
|
||||
@@ -559,10 +1007,13 @@ class AdeptMarksman(Feature):
|
||||
"""When you choose this archetype at 3rd level, you learn to perform powerful
|
||||
trick shots to disable or damage your opponents using your firearms.
|
||||
|
||||
**Trick Shots**: You learn two trick shots of your choice, which are detailed under "Trick Shots" below.
|
||||
If you have not already, add them by name to "features" in your character's .py file.
|
||||
**Trick Shots**: You learn two trick shots of your choice, which are
|
||||
detailed under "Trick Shots" below. If you have not already, add them by
|
||||
name to "features" in your character's .py file.
|
||||
|
||||
Many maneuvers enhance an attack in some way. Each use of a trick shot must be declared before the attack roll is made. You can use only one trick shot per attack.
|
||||
Many maneuvers enhance an attack in some way. Each use of a trick shot must
|
||||
be declared before the attack roll is made. You can use only one trick shot
|
||||
per attack.
|
||||
|
||||
You learn an additional trick shot of your choice at 7th, 10th, 15th, and
|
||||
18th level. Each time you learn a new trick shot, you can also replace one
|
||||
@@ -578,7 +1029,7 @@ class AdeptMarksman(Feature):
|
||||
saving throw to resist the trick shot’s effects. The saving throw DC is
|
||||
calculated as follows:
|
||||
|
||||
Trick Shot save DC = 8 + your proficiency bonus + your Dexterity modifier
|
||||
Trick Shot save DC = 8 + your proficiency bonus + your Dexterity modifier
|
||||
|
||||
Firearm Properties Firearms are a new and volatile technology, and as such
|
||||
bring their own unique set of weapon properties. Some properties are
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from .features import Feature
|
||||
from .. import (weapons, armor)
|
||||
from .. import (weapons, armor, spells)
|
||||
|
||||
|
||||
class UnarmoredDefenseMonk(Feature):
|
||||
@@ -67,6 +67,62 @@ class MartialArts(Feature):
|
||||
return weapon
|
||||
|
||||
|
||||
class Ki(Feature):
|
||||
"""Starting at 2nd level, your training allows you to harness the mystic
|
||||
energy of ki. Your access to this energy is represented by a number of ki
|
||||
points. Your monk level determines the number of points you have, as shown
|
||||
in the Ki Points column of the Monk table. You can spend these points to
|
||||
fuel various ki features.
|
||||
|
||||
You start knowing three such features: Flurry of Blows, Patient Defense,
|
||||
and Step of the Wind. You learn more ki features as you gain levels in this
|
||||
class. When you spend a ki point, it is unavailable until you finish a
|
||||
short or long rest, at the end of which you draw all of your expended ki
|
||||
back into yourself. You must spend at least 30 minutes of the rest
|
||||
meditating to regain your ki points.
|
||||
|
||||
Some of your ki features require your target to make a saving throw to
|
||||
resist the feature’s effects. The saving throw DC is calculated as follows:
|
||||
Ki save DC = 8 + your proficiency bonus + your Wisdom modifier
|
||||
|
||||
"""
|
||||
_name = "Ki"
|
||||
source = "Monk"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
num = self.owner.Monk.level
|
||||
DC = 8 + self.owner.proficiency_bonus + self.owner.wisdom.modifier
|
||||
return self._name + " ({:d} pts, DC={:d})".format(num, DC)
|
||||
|
||||
|
||||
class FlurryOfBlows(Feature):
|
||||
"""Immediately after you take the Attack action on your turn, you can spend 1
|
||||
ki point to make two unarmed strikes as a bonus action
|
||||
|
||||
"""
|
||||
name = "Flurry of Blows"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class PatientDefense(Feature):
|
||||
"""You can spend 1 ki point to take the Dodge action as a bonus action on your
|
||||
turn
|
||||
|
||||
"""
|
||||
name = "Patient Defense"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class StepOfTheWind(Feature):
|
||||
"""You can spend 1 ki point to take the Disengage or Dash action as a bonus
|
||||
action on your turn, and your jump distance is doubled for the turn
|
||||
|
||||
"""
|
||||
name = "Step of the Wind"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class UnarmoredMovement(Feature):
|
||||
"""Starting at 2nd level, your speed increases by 10 feet while you are not
|
||||
wearing armor or wielding a shield. This bonus increases when you reach
|
||||
@@ -92,3 +148,740 @@ class UnarmoredMovement(Feature):
|
||||
if level >= 18:
|
||||
_speed_bonus = 30
|
||||
return _speed_bonus
|
||||
|
||||
|
||||
class DeflectMissiles(Feature):
|
||||
"""Starting at 3rd level, you can use your reaction to deflect or catch the
|
||||
missile when you are hit by a ranged weapon attack. When you do so, the
|
||||
damage you take from the attack is reduced by 1d10 + your Dexterity
|
||||
modifier + your monk level. If you reduce the damage to 0, you can catch
|
||||
the missile if it is small enough for you to hold in one hand and you have
|
||||
at least one hand free.
|
||||
|
||||
If you catch a missile in this way, you can spend 1 ki point to make a
|
||||
ranged attack with the weapon or piece of ammunition you just caught, as
|
||||
part of the same reaction. You make this attack with proficiency,
|
||||
regardless of your weapon proficiencies, and the missile counts as a monk
|
||||
weapon for the attack
|
||||
|
||||
"""
|
||||
_name = "Deflect Missiles"
|
||||
source = "Monk"
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
mod = self.owner.dexterity.modifier + self.owner.Monk.level
|
||||
return self._name + " (1d10+{:d})".format(mod)
|
||||
|
||||
|
||||
class SlowFall(Feature):
|
||||
"""Beginning at 4th level, you can use your reaction when you fall to reduce
|
||||
any falling damage you take by an amount equal to five times your monk
|
||||
level.
|
||||
|
||||
"""
|
||||
name = "Slow Fall"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class ExtraAttackMonk(Feature):
|
||||
"""Beginning at 5th level, you can attack twice, instead of once, whenever you
|
||||
take the Attack action on your turn
|
||||
|
||||
"""
|
||||
name = "Extra Attack (2x)"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class StunningStrike(Feature):
|
||||
"""Starting at 5th level, you can interfere with the flow of ki in an
|
||||
opponent’s body. When you hit another creature with a melee weapon attack,
|
||||
you can spend 1 ki point to attempt a stunning strike. The target must
|
||||
succeed on a Constitution saving throw or be stunned until the end of your
|
||||
next turn
|
||||
|
||||
"""
|
||||
name = "Stunning Strike"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class KiEmpoweredStrikes(Feature):
|
||||
"""Starting at 6th level, your unarmed strikes count as magical for the
|
||||
purpose of overcoming resistance and immunity to nonmagical attacks and
|
||||
damage
|
||||
|
||||
"""
|
||||
name = "Ki-Empowered Strikes"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class StillnessOfMind(Feature):
|
||||
"""Starting at 7th level, you can use your action to end one effect on
|
||||
yourself that is causing you to be charmed or frightened
|
||||
|
||||
"""
|
||||
name = "Stillness of Mind"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class PurityOfBody(Feature):
|
||||
"""At 10th level, your mastery of the ki flowing through you makes you immune
|
||||
to disease and poison.
|
||||
|
||||
"""
|
||||
name = "Purity of Body"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class TongueOfTheSunAndMoon(Feature):
|
||||
"""Starting at 13th level, you learn to touch the ki of other minds so that
|
||||
you understand all spoken languages. Moreover, any creature that can
|
||||
understand a language can understand what you say.
|
||||
|
||||
"""
|
||||
name = "Tongue of the Sun and Moon"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class DiamondSoul(Feature):
|
||||
"""Beginning at 14th level, your mastery of ki grants you proficiency in all
|
||||
saving throws. Additionally, whenever you make a saving throw and fail, you
|
||||
can spend 1 ki point to reroll it and take the second result.
|
||||
|
||||
"""
|
||||
name = "Diamond Soul"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class TimelessBody(Feature):
|
||||
"""At 15th level, your ki sustains you so that you suffer none of the frailty
|
||||
of old age, and you can't be aged magically. You can still die of old age,
|
||||
however. In addition, you no longer need food or water.
|
||||
|
||||
"""
|
||||
name = "Timeless Body"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class EmptyBody(Feature):
|
||||
"""Beginning at 18th level, you can use your action to spend 4 ki points to
|
||||
become invisible for 1 minute. During that time, you also have resistance
|
||||
to all damage but force damage. Additionally, you can spend 8 ki points to
|
||||
cast the astral projection spell, without needing material components. When
|
||||
you do so, you can’t take any other creatures with you.
|
||||
|
||||
"""
|
||||
name = "Empty Body"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
class PerfectSelf(Feature):
|
||||
"""At 20th level, when you roll for initiative and have no ki points
|
||||
remaining, you regain 4 ki points.
|
||||
|
||||
"""
|
||||
name = "Perfect Self"
|
||||
source = "Monk"
|
||||
|
||||
|
||||
# Way of the Open Hand
|
||||
class OpenHandTechnique(Feature):
|
||||
"""Starting when you choose this tradition at 3rd level, you can manipulate
|
||||
your enemy’s ki when you harness your own. Whenever you hit a creature with
|
||||
one of the attacks granted by your Flurry of Blows, you can impose one of
|
||||
the following effects on that target:
|
||||
|
||||
-- It must succeed on a Dexterity saving throw or be knocked prone.
|
||||
|
||||
-- It must make a Strength saving throw. If it fails, you can push it up to
|
||||
15 feet away from you.
|
||||
|
||||
-- It can’t take reactions until the end of your next turn
|
||||
|
||||
"""
|
||||
name = "Open Hand Technique"
|
||||
source = "Monk (Way of the Open Hand)"
|
||||
|
||||
|
||||
class WholenessOfBody(Feature):
|
||||
"""At 6th level, you gain the ability to heal yourself. As an action, you can
|
||||
regain hit points equal to three times your monk level. You must finish a
|
||||
long rest before you can use this feature again
|
||||
|
||||
"""
|
||||
name = "Wholeness of Body"
|
||||
source = "Monk (Way of the Open Hand)"
|
||||
|
||||
|
||||
class Tranquility(Feature):
|
||||
"""Beginning at 11th level, you can enter a special meditation that surrounds
|
||||
you with an aura of peace. At the end of a long rest, you gain the effect
|
||||
of a sanctuary spell that lasts until the start of your next long rest (the
|
||||
spell can end early as normal). The saving throw DC for the spell equals 8
|
||||
+ your Wisdom modifier + your proficiency bonus
|
||||
|
||||
"""
|
||||
name = "Tranquility"
|
||||
source = "Monk (Way of the Open Hand)"
|
||||
|
||||
|
||||
class QuiveringPalm(Feature):
|
||||
"""At 17th level, you gain the ability to set up lethal vibrations in
|
||||
someone’s body. When you hit a creature with an unarmed strike, you can
|
||||
spend 3 ki points to start these imperceptible vibrations, which last for a
|
||||
number of days equal to your monk level. The vibrations are harmless unless
|
||||
you use your action to end them. To do so, you and the target must be on
|
||||
the same plane of existence. When you use this action, the creature must
|
||||
make a Constitution saving throw. If it fails, it is reduced to 0 hit
|
||||
points. If it succeeds, it takes 10d10 necrotic damage. You can have only
|
||||
one creature under the effect of this feature at a time. You can choose to
|
||||
end the vibrations harmlessly without using an action.
|
||||
|
||||
"""
|
||||
name = "Quivering Palm"
|
||||
source = "Monk (Way of the Open Hand)"
|
||||
|
||||
|
||||
# Way of Shadow
|
||||
class ShadowArts(Feature):
|
||||
"""Starting when you choose this tradition at 3rd level, you can use your ki
|
||||
to duplicate the effects of certain spells. As an action, you can spend 2
|
||||
ki points to cast darkness, darkvision, pass without trace, or silence,
|
||||
without providing material components. Additionally, you gain the minor
|
||||
illusion cantrip if you don’t already know it.
|
||||
|
||||
"""
|
||||
name = "Shadow Arts"
|
||||
source = "Monk (Way of Shadow)"
|
||||
|
||||
|
||||
class ShadowStep(Feature):
|
||||
"""At 6th level, you gain the ability to step from one shadow into
|
||||
another. When you are in dim light or darkness, as a bonus action you can
|
||||
teleport up to 60 feet to an unoccupied space you can see that is also in
|
||||
dim light or darkness. You then have advantage on the first melee attack
|
||||
you make before the end of the turn.
|
||||
|
||||
"""
|
||||
name = "Shadow Step"
|
||||
source = "Monk (Way of Shadow)"
|
||||
|
||||
|
||||
class CloakOfShadows(Feature):
|
||||
"""By 11th level, you have learned to become one with the shadows. When you
|
||||
are in an area of dim light or darkness, you can use your action to become
|
||||
invisible. You remain invisible until you make an attack, cast a spell, or
|
||||
are in an area of bright light.
|
||||
|
||||
"""
|
||||
name = "Cloak of Shadows"
|
||||
source = "Monk (Way of Shadow)"
|
||||
|
||||
|
||||
class Opportunist(Feature):
|
||||
"""At 17th level, you can exploit a creature's momentary distraction when it
|
||||
is hit by an attack. Whenever a creature within 5 feet of you is hit by an
|
||||
attack made by a creature other than you, you can use your reaction to make
|
||||
a melee attack against that creature.
|
||||
|
||||
"""
|
||||
name = "Opportunist"
|
||||
source = "Monk (Way of Shadow)"
|
||||
|
||||
|
||||
# Way of the Four Elements
|
||||
class DiscipleOfTheElements(Feature):
|
||||
"""When you choose this tradition at 3rd level, you learn magical disciplines
|
||||
that harness the power of the four elements. A discipline requires you to
|
||||
spend ki points each time you use it. You know the Elemental Attunement
|
||||
discipline and one other elemental discipline of your choice, which are
|
||||
detailed in the “Elemental Disciplines” section below.
|
||||
|
||||
You learn one additional elemental discipline of your choice at 6th, 11th,
|
||||
and 17th level. Whenever you learn a new elemental discipline, you can also
|
||||
replace one elemental discipline that you already know with a different
|
||||
discipline.
|
||||
|
||||
Add your chosen disciplines under "features" in your .py file
|
||||
|
||||
**Casting Elemental Spells**: Some elemental disciplines allow you to cast
|
||||
spells. See chapter 10 for the general rules of spellcasting. To cast one o
|
||||
f these spells, you use its casting time and other rules, but you don’t
|
||||
need to provide material components for it. Once you reach 5th level in
|
||||
this class, you can spend additional ki points to increase the level of an
|
||||
elemental discipline spell that you cast, provided that the spell has an
|
||||
enhanced effect at a higher level, as burning hands does. The spell's level
|
||||
increases by 1 for each additional ki point you spend. For example, if you
|
||||
are a 5th-level monk and use Sweeping Cinder Strike to cast burning hands,
|
||||
you can spend 3 ki points to cast it as a 2nd-level spell (the discipline’s
|
||||
base cost of 2 ki points plus 1).
|
||||
|
||||
The maximum number of ki points you can spend to cast a spell in this way
|
||||
(including its base ki point cost and any additional ki points you spend to
|
||||
increase its level) is determined by your monk level, as shown in the
|
||||
Spells and Ki Points table.
|
||||
|
||||
Monk Levels 5-8 : 3 Ki points Max
|
||||
|
||||
Monk Levels 9-12 : 4 Ki points Max
|
||||
|
||||
Monk Levels 13-16 : 5 Ki points Max
|
||||
|
||||
Monk Levels 17-20 : 6 Ki points Max
|
||||
|
||||
"""
|
||||
name = "Disciple of the Elements"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
|
||||
|
||||
class ElementalAttunement(Feature):
|
||||
"""You can use your action to briefly control elemental forces nearby, causing
|
||||
one of the following effects of your choice:
|
||||
|
||||
-- Create a harmless, instantaneous sensory effect related to air, earth,
|
||||
fire, or water, such as a shower of sparks, a puff of wind, a spray o f
|
||||
light mist, or a gentle rumbling of stone.
|
||||
|
||||
-- Instantaneously light or snuff out a candle, a torch, or a small
|
||||
campfire.
|
||||
|
||||
-- Chill or warm up to 1 pound of nonliving material for up to 1 hour.
|
||||
|
||||
-- Cause earth, fire, water, or mist that can fit within a 1-foot cube to
|
||||
shape itself into a crude form you desig nate for 1 minute.
|
||||
|
||||
"""
|
||||
name = "Elemental Attunement"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
|
||||
|
||||
class BreathOfWinter(Feature):
|
||||
"""You can spend 6 ki points to cast cone of cold.
|
||||
|
||||
**Prerequisite**: 17th Level
|
||||
|
||||
"""
|
||||
name = "Breath of Winter"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.ConeOfCold,)
|
||||
|
||||
|
||||
class ClenchOfTheNorthWind(Feature):
|
||||
"""You can spend 3 ki points to cast hold person.
|
||||
|
||||
**Prerequisite**: 6th Level
|
||||
|
||||
"""
|
||||
name = "Clench of the North Wind"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.HoldPerson,)
|
||||
|
||||
|
||||
class EternalMountainDefense(Feature):
|
||||
"""You can spend 5 ki points to cast stoneskin, targeting yourself.
|
||||
|
||||
**Prerequisite**: 11th Level
|
||||
"""
|
||||
name = "Eternal Mountain Defense"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.Stoneskin,)
|
||||
|
||||
|
||||
class FangsOfTheFireSnake(Feature):
|
||||
"""When you use the Attack action on your turn, you can spend 1 ki point to
|
||||
cause tendrils of flame to stretch out from your fists and feet. Your reach
|
||||
with your unarmed strikes increases by 10 feet for that action, as well as
|
||||
the rest o f the turn. A hit with such an attack deals fire damage instead
|
||||
of bludgeoning damage, and if you spend 1 ki point when the attack hits, it
|
||||
also deals an extra 1d10 fire damage
|
||||
|
||||
"""
|
||||
name = "Fangs of the Fire Snake"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
|
||||
|
||||
class FistOfFourThunders(Feature):
|
||||
"""You can spend 2 ki points to cast thunderwave
|
||||
|
||||
"""
|
||||
name = "Fist of Four Thunders"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.Thunderwave,)
|
||||
|
||||
|
||||
class FistOfUnbrokenAir(Feature):
|
||||
"""You can create a blast of compressed air that strikes like a mighty
|
||||
fist. As an action, you can spend 2 ki points and choose a creature within
|
||||
30 feet of you. That creature must make a Strength saving throw. On a
|
||||
failed save, the creature takes 3d10 bludgeoning damage, plus an extra 1d10
|
||||
bludgeoning damage for each additional ki point you spend, and you can push
|
||||
the creature up to 20 feet away from you and knock it prone. On a
|
||||
successful save, the creature takes half as much damage, and you don’t push
|
||||
it or knock it prone.
|
||||
|
||||
"""
|
||||
name = "Fist of Unbroken Air"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
|
||||
|
||||
class FlamesOfThePhoenix(Feature):
|
||||
"""You can spend 4 ki points to cast fireball.
|
||||
|
||||
**Prerequisite**: 11th Level
|
||||
|
||||
"""
|
||||
name = "Flames of the Phoenix"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.Fireball,)
|
||||
|
||||
|
||||
class GongOfTheSummit(Feature):
|
||||
"""You can spend 3 ki points to cast shatter.
|
||||
|
||||
**Prerequisite**: 6th Level
|
||||
|
||||
"""
|
||||
name = "Gong of the Summit"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.Shatter,)
|
||||
|
||||
|
||||
class MistStance(Feature):
|
||||
"""You can spend 4 ki points to cast gaseous form, targeting yourself.
|
||||
|
||||
**Prerequisite**: 11th Level
|
||||
|
||||
"""
|
||||
name = "Mist Stance"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.GaseousForm,)
|
||||
|
||||
|
||||
class RideTheWind(Feature):
|
||||
"""You can spend 4 ki points to cast fly, targeting yourself
|
||||
|
||||
**Prerequisite**: 11th Level
|
||||
|
||||
"""
|
||||
name = "Ride the Wind"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.Fly,)
|
||||
|
||||
|
||||
class RiverOfHungryFlame(Feature):
|
||||
"""You can spend 5 ki points to cast wall of fire.
|
||||
|
||||
**Prerequisite**: 17th Level
|
||||
|
||||
"""
|
||||
name = "River of Hungry Flame"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.WallOfFire,)
|
||||
|
||||
|
||||
class RushOfTheGaleSpirits(Feature):
|
||||
"""You can spend 2 ki points to cast gust of wind.
|
||||
|
||||
"""
|
||||
name = "Rush of the Gale Spirits"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.GustOfWind,)
|
||||
|
||||
|
||||
class ShapeTheFlowingRiver(Feature):
|
||||
"""As an action, you can spend 1 ki point to choose an area of ice or water no
|
||||
larger than 30 feet on a side within 120 feet o f you. You can change water
|
||||
to ice within the area and vice versa, and you can reshape ice in the area
|
||||
in any manner you choose. You can raise or lower the ice’s elevation,
|
||||
create or fill in a trench, erect or flatten a wall, or form a pillar. The
|
||||
extent of any such changes can’t exceed half the area’s largest
|
||||
dimension. For example, if you affect a 30-foot square, you can create a
|
||||
pillar up to 15 feet high, raise or lower the square’s elevation by up to
|
||||
15 feet, dig a trench up to 15 feet deep, and so on. You can’t shape the
|
||||
ice to trap or injure a creature in the area.
|
||||
|
||||
"""
|
||||
name = "Shape the Flowing River"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
|
||||
|
||||
class SweepingCinderStrike(Feature):
|
||||
"""You can spend 2 ki points to cast burning hands
|
||||
|
||||
"""
|
||||
name = "Sweeping Cinder Strike"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.BurningHands,)
|
||||
|
||||
|
||||
class WaterWhip(Feature):
|
||||
"""You can spend 2 ki points as a bonus action to create a whip of water that
|
||||
shoves and pulls a creature to unbalance it. A creature that you can see
|
||||
that is within 30 feet of you must make a Dexterity saving throw. On a
|
||||
failed save, the creature takes 3d10 bludgeoning damage, plus an extra 1d10
|
||||
bludgeoning damage for each additional ki point you spend, and you can
|
||||
either knock it prone or pull it up to 25 feet closer to you. On a
|
||||
successful save, the creature takes half as much damage, and you don’t pull
|
||||
it or knock it prone
|
||||
|
||||
"""
|
||||
name = "Water Whip"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
|
||||
|
||||
class WaveOfRollingEarth(Feature):
|
||||
"""You can spend 6 ki points to cast wall of stone
|
||||
|
||||
**Prerequisite**: 17th Level
|
||||
|
||||
"""
|
||||
name = "Wave of Rolling Earth"
|
||||
source = "Monk (Way of the Four Elements)"
|
||||
spells_known = (spells.WallOfStone,)
|
||||
|
||||
|
||||
# Way of the Long Death
|
||||
class TouchOfDeath(Feature):
|
||||
"""Starting when you choose this tradition at 3rd level, your study of death
|
||||
allows you to extract vitality from an- other creature as it nears its
|
||||
demise. When you reduce a creature within 5 feet of you to 0 hit points,
|
||||
you gain temporary hit points equal to your Wisdom modifier + your monk
|
||||
level (minimum of 1 temporary hit point)
|
||||
|
||||
"""
|
||||
name = 'Touch of Death'
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
|
||||
class HourOfReaping(Feature):
|
||||
"""At 6th level, you gain the ability to unsettle or terrify those around you
|
||||
as an action, for your soul has been touched by the shadow of death. When
|
||||
you take this ac- tion , each creature within 30 feet of you that can see
|
||||
you must succeed on a Wisdom saving throw or be fright- ened of you until
|
||||
the end of your next turn
|
||||
|
||||
"""
|
||||
name = "Hour of Reaping"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
|
||||
class MasteryOfDeath(Feature):
|
||||
"""Beginning at 11th level, you use your familiarity with death to escape its
|
||||
grasp. When you are reduced to 0 hit points, you can expend 1 ki point (no
|
||||
action required) to have 1 hit point instead
|
||||
|
||||
"""
|
||||
name = "Mastery of Death"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
|
||||
class TouchOfTheLongDeath(Feature):
|
||||
"""Starting at 17th level, your touch can channel the energy of death into a
|
||||
creature. As an action, you touch one creature within 5 feet of you, and
|
||||
you expend 1 to 10 ki points. The target must make a Constitution saving
|
||||
throw, and it takes 2d10 necrotic damage per ki point spent on a failed
|
||||
save, or half as much damage on a suc- cessful one
|
||||
|
||||
"""
|
||||
name = "Touch of the Long Death"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
|
||||
# Way of the Sun Soul
|
||||
class RadiantSunBolt(Feature):
|
||||
"""Starting when you choose this tradition at 3rd level, you can hurl searing
|
||||
bolts of magical radiance. You gain a ranged spell attack that you can use
|
||||
with the Attack action. The attack has a range of 30 feet. You are
|
||||
proficient with it, and you add your Dexterity modi- fier to its attack and
|
||||
damage rolls. Its damage is radiant, and its damage die is a d4.
|
||||
|
||||
This die changes as you gain monk levels, as shown in the Martial Arts
|
||||
column of the Monk table. When you use the Attack action on your turn to
|
||||
use this special attack, you can spend 1 ki point to make two additional
|
||||
attacks with it as a bonus action.
|
||||
|
||||
"""
|
||||
name = "Radiant Sun Bolt"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
def __init__(self, owner=None):
|
||||
super().__init__(owner=owner)
|
||||
self.owner.wield_weapon("sun bolt")
|
||||
|
||||
|
||||
class SearingArcStrike(Feature):
|
||||
"""At 6th level, you gain the ability to channel your ki into searing waves of
|
||||
energy. Immediately after you take the Attack action on your turn, you can
|
||||
spend 2 ki points to cast the 1st-level spell burning hands as a bonus
|
||||
action. You can spend additional ki points to cast burning hands as a
|
||||
higher level spell. Each additional ki point you spend increases the
|
||||
spell's level by 1. The maximum number of ki points (2 plus any additional
|
||||
points) that you can spend on the spell equals half your monk level (round
|
||||
down)
|
||||
|
||||
"""
|
||||
name = "Searing Arc Strike"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
spells_known = (spells.BurningHands,)
|
||||
|
||||
|
||||
class SearingSunburst(Feature):
|
||||
"""At 11th level, you gain the ability to create an orb of light that erupts
|
||||
into a devastating explosion. As an action, you create an orb and hurl it
|
||||
at a point you choose within 150 feet, where it erupts into a sphere of
|
||||
radiant light for a brief but deadly instant. Each creature in that
|
||||
20-foot-radius sphere must succeed on a Constitution saving throw or take
|
||||
2d6 radiant damage. A creature doesn't need to make the save if the
|
||||
creature is behind total cover that is opaque. You can increase the
|
||||
sphere's damage by spending ki points. Each point you spend, up to a
|
||||
maximum of 3, increases the damage by 2d6.
|
||||
|
||||
"""
|
||||
name = "Searing Sunburst"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
|
||||
class SunShield(Feature):
|
||||
"""At 17th level, you become wreathed in a luminous aura. You shed bright
|
||||
light in a 30-foot radius and dim light for an additional 30 feet. You can
|
||||
extinguish or restore the light as a bonus action. If a creature hits you
|
||||
with a melee attack while this light shines, you can use you r reaction to
|
||||
deal radiant damage to the creature. The radiant damage equals 5 + your
|
||||
Wisdom modifier
|
||||
|
||||
"""
|
||||
name = "Sun Shield"
|
||||
source = "Monk (Way of the Sun Soul)"
|
||||
|
||||
|
||||
# Way of the Drunken Master
|
||||
class DrunkenTechnique(Feature):
|
||||
"""At 3rd level, you learn how to twist and turn quickly as part of your
|
||||
Flurry of Blows. Whenever you use Flurry of Blows, you gain the benefit of
|
||||
the Disengage action, and your walking speed increases by 10 feet until the
|
||||
end of the current turn
|
||||
|
||||
"""
|
||||
name = "Drunken Technique"
|
||||
source = "Monk (Way of the Drunken Master)"
|
||||
|
||||
|
||||
class TipsySway(Feature):
|
||||
"""Starting at 6th level, you can move in sudden, swaying ways. You gain the
|
||||
following benefits.
|
||||
|
||||
**Leap to Your Feet**: When you’re prone, you can stand up
|
||||
by spending 5 feet of movement, rather than half your speed.
|
||||
|
||||
**Redirect Attack**: When a creature misses you with a melee attack roll,
|
||||
you can spend 1 ki point as a re- action to cause that attack to hit one
|
||||
creature of your choice, other than the attacker, that you can see within 5
|
||||
feet of you.
|
||||
|
||||
"""
|
||||
name = "Tipsy Sway"
|
||||
source = "Monk (Way of the Drunken Master)"
|
||||
|
||||
|
||||
class DrunkardsLuck(Feature):
|
||||
"""Starting at llth level, you always seem to get a lucky bounce at the right
|
||||
moment. When you make an ability check, an attack roll, or a saving throw
|
||||
and have disad- vantage on the roll, you can spend 2 ki points to cancel
|
||||
the disadvantage for that roll
|
||||
|
||||
"""
|
||||
name = "Drunkard's Luck"
|
||||
source = "Monk (Way of the Drunken Master)"
|
||||
|
||||
|
||||
class IntoxicatedFrenzy(Feature):
|
||||
"""At 17th level, you gain the ability to make an overwhelm- ing number of
|
||||
attacks against a group of enemies. When you use your Flurry of Blows, you
|
||||
can make up to three additional attacks with it (up to a total of five
|
||||
Flurry of Blows attacks), provided that each Flurry of Blows at- tack
|
||||
targets a different creature this turn
|
||||
|
||||
"""
|
||||
name = "Intoxicated Frenzy"
|
||||
source = "Monk (Way of the Drunken Master)"
|
||||
|
||||
|
||||
# Way of the Kensei
|
||||
class PathOfTheKensei(Feature):
|
||||
"""When you choose this tradition at 3rd level, your spe- cial martial arts
|
||||
training leads you to master the use of certain weapons. This path also
|
||||
includes instruction in the deft strokes of calligraphy or painting. You
|
||||
gain the following benefits.
|
||||
|
||||
**Kensei Weapons**: Choose two types of weapons to be your kensei weapons:
|
||||
one melee weapon and one ranged weapon. Each of these weapons can be any
|
||||
sim- ple or martial weapon that lacks the heavy and special properties. The
|
||||
longbow is also a valid choice. You gain proficiency with these weapons if
|
||||
you don’t already have it. Weapons of the chosen types are monk weapons for
|
||||
you. Many of this tradition’s features work only with your kensei
|
||||
weapons. When you reach 6th, 11th, and 17th level in this class. you can
|
||||
choose another type of weapon—either melee or ranged—to be a kensei weapon
|
||||
for you. following the criteria above.
|
||||
|
||||
**Agile Parry**: If you make an unarmed strike as part of the Attack action
|
||||
on your turn and are holding a kensei weapon, you can use it to defend
|
||||
yourself if it is a melee weapon. You gain a +2 bonus to AC until the start
|
||||
of your next turn, while the weapon is in your hand and you aren't
|
||||
incapacitated.
|
||||
|
||||
**Kensei’s Shot**: You can use a bonus action on your turn to make your
|
||||
ranged attacks with a kensei weapon more deadly. When you do so, any target
|
||||
you hit with a ranged attack using a kensei weapon takes an extra 1d4
|
||||
damage of the weapons type. You retain this benefit un— til the end of the
|
||||
current turn.
|
||||
|
||||
**Way ofthe Brush**: You gain proficiency with your choice of
|
||||
calligrapher's supplies or painter's supplies
|
||||
|
||||
"""
|
||||
name = "Path of the Kensei"
|
||||
source = "Monk (Way of the Kensei)"
|
||||
|
||||
|
||||
class OneWithTheBlade(Feature):
|
||||
"""At 6th level, you extend your ki into your kensei weap- ons, granting you
|
||||
the following benefits.
|
||||
|
||||
**Magic Kensei Weapons**: Your attacks with your kensei weapons count as
|
||||
magical for the purpose of over- coming resistance and immunity to
|
||||
nonmagical attacks and damage
|
||||
|
||||
**Deft Strike**: When you hit a target with a kensei weapon, you can spend
|
||||
1 ki point to cause the weapon to deal extra damage to the target equal to
|
||||
your Martial Arts die. You can use this feature only once on each of
|
||||
your turns.
|
||||
|
||||
"""
|
||||
name = "One with the Blade"
|
||||
source = "Monk (Way of the Kensei)"
|
||||
|
||||
|
||||
class SharpenTheBlade(Feature):
|
||||
"""At 11th level, you gain the ability to augment your weap- ons further with
|
||||
your ki. As a bonus action, you can expend up to 3 ki points to grant one
|
||||
kensei weapon you touch a bonus to attack and damage rolls when you attack
|
||||
with it. The bonus equals the number of ki points you spent. This bonus
|
||||
lasts for 1 minute or until you use this feature again. This feature has no
|
||||
effect on a magic weapon that already has a bonus to attack and damage
|
||||
rolls
|
||||
|
||||
"""
|
||||
name = "Sharpen the Blade"
|
||||
source = "Monk (Way of the Kensei)"
|
||||
|
||||
|
||||
class UnerringAccuracy(Feature):
|
||||
"""At 17th level, your mastery of weapons grants you ex- traordinary
|
||||
accuracy. Ifyou miss with an attack roll using a monk weapon on your turn,
|
||||
you can reroll it. You can use this feature only once on each of your
|
||||
turns.
|
||||
|
||||
"""
|
||||
name = "Unerring Accuracy"
|
||||
source = "Monk (Way of the Kensei)"
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ class Evasion(Feature):
|
||||
|
||||
"""
|
||||
name = "Evasion"
|
||||
source = "Rogue"
|
||||
source = "Class (many)"
|
||||
|
||||
|
||||
class ReliableTalent(Feature):
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+11
-8
@@ -4,7 +4,7 @@ from .armor import NoArmor, NoShield, HeavyArmor
|
||||
from .features import (UnarmoredDefenseMonk, UnarmoredDefenseBarbarian,
|
||||
DraconicResilience, Defense, FastMovement,
|
||||
UnarmoredMovement, GiftOfTheDepths, RemarkableAthelete,
|
||||
SeaSoul, JackOfAllTrades)
|
||||
SeaSoul, JackOfAllTrades, SoulOfTheForge)
|
||||
from math import ceil
|
||||
|
||||
|
||||
@@ -126,18 +126,21 @@ class ArmorClass():
|
||||
else:
|
||||
ac += min(char.dexterity.modifier, armor.dexterity_mod_max)
|
||||
# Compute feature-specific additions
|
||||
if any([isinstance(f, UnarmoredDefenseMonk) for f in char.features]):
|
||||
if char.has_feature(UnarmoredDefenseMonk):
|
||||
if (isinstance(armor, NoArmor) and isinstance(shield, NoShield)):
|
||||
ac += char.wisdom.modifier
|
||||
if any([isinstance(f, UnarmoredDefenseBarbarian) for f in char.features]):
|
||||
if char.has_feature(UnarmoredDefenseBarbarian):
|
||||
if isinstance(armor, NoArmor):
|
||||
ac += char.constitution.modifier
|
||||
if any([isinstance(f, DraconicResilience) for f in char.features]):
|
||||
if char.has_feature(DraconicResilience):
|
||||
if isinstance(armor, NoArmor):
|
||||
ac += 3
|
||||
if any([isinstance(f, Defense) for f in char.features]):
|
||||
if char.has_feature(Defense):
|
||||
if not isinstance(armor, NoArmor):
|
||||
ac += 1
|
||||
if char.has_feature(SoulOfTheForge):
|
||||
if isinstance(armor, HeavyArmor):
|
||||
ac += 1
|
||||
# Check if any magic items add to AC
|
||||
for mitem in char.magic_items:
|
||||
if hasattr(mitem, 'ac_bonus'):
|
||||
@@ -156,17 +159,17 @@ class Speed():
|
||||
if isinstance(speed, str):
|
||||
other_speed = speed[2:]
|
||||
speed = int(speed[:2]) # ignore other speeds, like fly
|
||||
if any([isinstance(f, FastMovement) for f in char.features]):
|
||||
if char.has_feature(FastMovement):
|
||||
if not isinstance(char.armor, HeavyArmor):
|
||||
speed += 10
|
||||
if isinstance(char.armor, NoArmor) or (char.armor is None):
|
||||
for f in char.features:
|
||||
if isinstance(f, UnarmoredMovement):
|
||||
speed += f.speed_bonus
|
||||
if any([isinstance(f, GiftOfTheDepths) for f in char.features]):
|
||||
if char.has_feature(GiftOfTheDepths):
|
||||
if 'swim' not in other_speed:
|
||||
other_speed += ' ({:d} swim)'.format(speed)
|
||||
if any([isinstance(f, SeaSoul) for f in char.features]):
|
||||
if char.has_feature(SeaSoul):
|
||||
if 'swim' not in other_speed:
|
||||
other_speed += ' (30 swim)'
|
||||
return '{:d}{:s}'.format(speed, other_speed)
|
||||
|
||||
@@ -441,6 +441,16 @@ class Unarmed(MeleeWeapon):
|
||||
ability = "strength"
|
||||
|
||||
|
||||
class SunBolt(RangedWeapon):
|
||||
name = "Sun Bolt"
|
||||
cost = "0 gp"
|
||||
base_damage = "1d4"
|
||||
damage_type = "r"
|
||||
weight = 0
|
||||
properties = "(range 20/60)"
|
||||
ability = 'dexterity'
|
||||
|
||||
|
||||
# Custom weapons
|
||||
class HeavyPunch(MeleeWeapon):
|
||||
base_damage = "1d4"
|
||||
@@ -534,6 +544,6 @@ martial_ranged_weapons = (Blowgun, HandCrossbow, HeavyCrossbow,
|
||||
martial_weapons = martial_melee_weapons + martial_ranged_weapons
|
||||
|
||||
monk_weapons = (Shortsword, Unarmed, Club, Dagger, Handaxe, Javelin,
|
||||
LightHammer, Mace, Quarterstaff, Sickle, Spear)
|
||||
LightHammer, Mace, Quarterstaff, Sickle, Spear, SunBolt)
|
||||
|
||||
firearms = (Firearm, Blunderbuss, Pistol, Musket)
|
||||
|
||||
Reference in New Issue
Block a user