mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-06-07 13:15:53 +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"
|
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 = 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):
|
class LifeDomain(ClericDomain):
|
||||||
@@ -57,8 +66,18 @@ class LifeDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Life Domain"
|
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 = 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):
|
class LightDomain(ClericDomain):
|
||||||
@@ -75,8 +94,19 @@ class LightDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Light Domain"
|
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 = 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):
|
class NatureDomain(ClericDomain):
|
||||||
@@ -93,8 +123,18 @@ class NatureDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Nature Domain"
|
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 = 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):
|
class TempestDomain(ClericDomain):
|
||||||
@@ -120,11 +160,11 @@ class TempestDomain(ClericDomain):
|
|||||||
weapon_proficiencies = (weapons.MartialWeapon,)
|
weapon_proficiencies = (weapons.MartialWeapon,)
|
||||||
_proficiencies_text = ('martial weapons', 'heavy armor')
|
_proficiencies_text = ('martial weapons', 'heavy armor')
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
features_by_level[1] = (features.WrathOfTheStorm,)
|
features_by_level[1] = [features.WrathOfTheStorm]
|
||||||
features_by_level[2] = (features.DestructiveWrath,)
|
features_by_level[2] = [features.DestructiveWrath]
|
||||||
features_by_level[6] = (features.ThunderboltStrike,)
|
features_by_level[6] = [features.ThunderboltStrike]
|
||||||
features_by_level[8] = (features.DivineStrikeTempest,)
|
features_by_level[8] = [features.DivineStrikeTempest]
|
||||||
features_by_level[17] = (features.Stormborn,)
|
features_by_level[17] = [features.Stormborn]
|
||||||
|
|
||||||
|
|
||||||
class TrickeryDomain(ClericDomain):
|
class TrickeryDomain(ClericDomain):
|
||||||
@@ -139,8 +179,17 @@ class TrickeryDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Trickery Domain"
|
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 = 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):
|
class WarDomain(ClericDomain):
|
||||||
@@ -159,8 +208,19 @@ class WarDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "War Domain"
|
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 = 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
|
# SCAG
|
||||||
@@ -181,8 +241,17 @@ class ArcanaDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Arcana Domain"
|
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 = 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
|
# XGTE
|
||||||
@@ -201,7 +270,18 @@ class ForgeDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Forge Domain"
|
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 = 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):
|
class GraveDomain(ClericDomain):
|
||||||
@@ -218,8 +298,18 @@ class GraveDomain(ClericDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Grave Domain"
|
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 = 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):
|
class Cleric(CharClass):
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ class LandCircle(SubClass):
|
|||||||
name = "Circle of the Land"
|
name = "Circle of the Land"
|
||||||
circle = "land"
|
circle = "land"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class MoonCircle(SubClass):
|
||||||
@@ -39,6 +44,10 @@ class MoonCircle(SubClass):
|
|||||||
name = "Circle of the Moon"
|
name = "Circle of the Moon"
|
||||||
circle = "moon"
|
circle = "moon"
|
||||||
features_by_level = defaultdict(list)
|
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
|
# XGTE
|
||||||
@@ -55,6 +64,10 @@ class DreamsCircle(SubClass):
|
|||||||
name = "Circle of Dreams"
|
name = "Circle of Dreams"
|
||||||
circle = "dreams"
|
circle = "dreams"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class ShepherdCircle(SubClass):
|
||||||
@@ -78,7 +91,12 @@ class ShepherdCircle(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Circle of the Shepherd"
|
name = "Circle of the Shepherd"
|
||||||
circle = "shepherd"
|
circle = "shepherd"
|
||||||
|
languages = ('Sylvan',)
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class Druid(CharClass):
|
||||||
@@ -106,7 +124,10 @@ class Druid(CharClass):
|
|||||||
class_skill_choices = ('Arcana', 'Animal Handling', 'Insight',
|
class_skill_choices = ('Arcana', 'Animal Handling', 'Insight',
|
||||||
'Medicine', 'Nature', 'Perception', 'Religion',
|
'Medicine', 'Nature', 'Perception', 'Religion',
|
||||||
'Survival')
|
'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,
|
subclasses_available = (LandCircle, MoonCircle, DreamsCircle,
|
||||||
ShepherdCircle)
|
ShepherdCircle)
|
||||||
spellcasting_ability = 'wisdom'
|
spellcasting_ability = 'wisdom'
|
||||||
|
|||||||
@@ -102,6 +102,10 @@ class PurpleDragonKnight(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Purple Dragon Knight"
|
name = "Purple Dragon Knight"
|
||||||
features_by_level = defaultdict(list)
|
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
|
# XGTE
|
||||||
@@ -118,6 +122,9 @@ class ArcaneArcher(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Arcane Archer"
|
name = "Arcane Archer"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class Cavalier(SubClass):
|
||||||
@@ -132,6 +139,12 @@ class Cavalier(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Cavalier"
|
name = "Cavalier"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class Samurai(SubClass):
|
||||||
@@ -142,6 +155,12 @@ class Samurai(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Samurai"
|
name = "Samurai"
|
||||||
features_by_level = defaultdict(list)
|
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
|
# Custom
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ class OpenHandWay(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Way of the Open Hand"
|
name = "Way of the Open Hand"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class ShadowWay(SubClass):
|
||||||
@@ -30,6 +34,10 @@ class ShadowWay(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Way of Shadow"
|
name = "Way of Shadow"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class FourElementsWay(SubClass):
|
||||||
@@ -45,21 +53,13 @@ class FourElementsWay(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Way of the Four Elements"
|
name = "Way of the Four Elements"
|
||||||
|
spellcasting_ability = 'wisdom'
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.DiscipleOfTheElements,
|
||||||
|
features.ElementalAttunement]
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# 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):
|
class LongDeathWay(SubClass):
|
||||||
"""Monks of the Way of the Long Death are obsessed with the meaning and
|
"""Monks of the Way of the Long Death are obsessed with the meaning and
|
||||||
mechanics of dying. They capture creatures and prepare elaborate
|
mechanics of dying. They capture creatures and prepare elaborate
|
||||||
@@ -70,6 +70,25 @@ class LongDeathWay(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Way of the Long Death"
|
name = "Way of the Long Death"
|
||||||
features_by_level = defaultdict(list)
|
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
|
# XGTE
|
||||||
@@ -87,7 +106,13 @@ class DrunkenMasterWay(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Way of the Drunken Master"
|
name = "Way of the Drunken Master"
|
||||||
|
_proficiencies_text = ("brewer's suplies",)
|
||||||
|
skill_proficiencies = ("performance",)
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class KenseiWay(SubClass):
|
||||||
@@ -105,6 +130,10 @@ class KenseiWay(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Way of the Kensei"
|
name = "Way of the Kensei"
|
||||||
features_by_level = defaultdict(list)
|
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):
|
class Monk(CharClass):
|
||||||
@@ -130,6 +159,20 @@ class Monk(CharClass):
|
|||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
features_by_level[1] = [features.UnarmoredDefenseMonk,
|
features_by_level[1] = [features.UnarmoredDefenseMonk,
|
||||||
features.MartialArts]
|
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):
|
def __init__(self, level, subclass=None, **params):
|
||||||
super().__init__(level, subclass=subclass, **params)
|
super().__init__(level, subclass=subclass, **params)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from .features import Feature
|
from .features import Feature
|
||||||
|
from .. import spells
|
||||||
|
|
||||||
|
|
||||||
# Cleric Features
|
# Cleric Features
|
||||||
@@ -97,6 +98,280 @@ class DivineIntervention(Feature):
|
|||||||
source = "Cleric"
|
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
|
# Tempest Domain
|
||||||
class WrathOfTheStorm(Feature):
|
class WrathOfTheStorm(Feature):
|
||||||
"""Also at 1st level, you can thunderously rebuke attackers. When a creature
|
"""Also at 1st level, you can thunderously rebuke attackers. When a creature
|
||||||
@@ -139,7 +414,7 @@ class ThunderboltStrike(Feature):
|
|||||||
source = "Cleric (Tempest Domain)"
|
source = "Cleric (Tempest Domain)"
|
||||||
|
|
||||||
|
|
||||||
class DivineStrikeTempest(Feature):
|
class DivineStrikeTempest(DivineStrike):
|
||||||
"""At 8th level, you gain the ability to infuse your weapon strikes with
|
"""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
|
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
|
weapon attack, you can cause the attack to deal an extra 1d8 thunder damage
|
||||||
@@ -147,21 +422,360 @@ class DivineStrikeTempest(Feature):
|
|||||||
2d8.
|
2d8.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
_name = "Divine Strike"
|
|
||||||
source = "Cleric (Tempest Domain)"
|
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):
|
class Stormborn(Feature):
|
||||||
"""At 17th level, you have a flying speed equal to your current walking speed
|
"""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"
|
name = "Stormborn"
|
||||||
source = "Cleric (Tempest Domain)"
|
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
|
from .. import weapons
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -542,6 +542,454 @@ class ImprovedWarMagic(Feature):
|
|||||||
source = "Fighter (Eldritch Knight)"
|
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
|
# Gunslinger
|
||||||
class Gunsmith(Feature):
|
class Gunsmith(Feature):
|
||||||
"""Upon choosing this archetype at 3rd level, you gain proficiency with
|
"""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
|
"""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 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.
|
**Trick Shots**: You learn two trick shots of your choice, which are
|
||||||
If you have not already, add them by name to "features" in your character's .py file.
|
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
|
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
|
18th level. Each time you learn a new trick shot, you can also replace one
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from .features import Feature
|
from .features import Feature
|
||||||
from .. import (weapons, armor)
|
from .. import (weapons, armor, spells)
|
||||||
|
|
||||||
|
|
||||||
class UnarmoredDefenseMonk(Feature):
|
class UnarmoredDefenseMonk(Feature):
|
||||||
@@ -67,6 +67,62 @@ class MartialArts(Feature):
|
|||||||
return weapon
|
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):
|
class UnarmoredMovement(Feature):
|
||||||
"""Starting at 2nd level, your speed increases by 10 feet while you are not
|
"""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
|
wearing armor or wielding a shield. This bonus increases when you reach
|
||||||
@@ -92,3 +148,740 @@ class UnarmoredMovement(Feature):
|
|||||||
if level >= 18:
|
if level >= 18:
|
||||||
_speed_bonus = 30
|
_speed_bonus = 30
|
||||||
return _speed_bonus
|
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"
|
name = "Evasion"
|
||||||
source = "Rogue"
|
source = "Class (many)"
|
||||||
|
|
||||||
|
|
||||||
class ReliableTalent(Feature):
|
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,
|
from .features import (UnarmoredDefenseMonk, UnarmoredDefenseBarbarian,
|
||||||
DraconicResilience, Defense, FastMovement,
|
DraconicResilience, Defense, FastMovement,
|
||||||
UnarmoredMovement, GiftOfTheDepths, RemarkableAthelete,
|
UnarmoredMovement, GiftOfTheDepths, RemarkableAthelete,
|
||||||
SeaSoul, JackOfAllTrades)
|
SeaSoul, JackOfAllTrades, SoulOfTheForge)
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
|
||||||
|
|
||||||
@@ -126,18 +126,21 @@ class ArmorClass():
|
|||||||
else:
|
else:
|
||||||
ac += min(char.dexterity.modifier, armor.dexterity_mod_max)
|
ac += min(char.dexterity.modifier, armor.dexterity_mod_max)
|
||||||
# Compute feature-specific additions
|
# 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)):
|
if (isinstance(armor, NoArmor) and isinstance(shield, NoShield)):
|
||||||
ac += char.wisdom.modifier
|
ac += char.wisdom.modifier
|
||||||
if any([isinstance(f, UnarmoredDefenseBarbarian) for f in char.features]):
|
if char.has_feature(UnarmoredDefenseBarbarian):
|
||||||
if isinstance(armor, NoArmor):
|
if isinstance(armor, NoArmor):
|
||||||
ac += char.constitution.modifier
|
ac += char.constitution.modifier
|
||||||
if any([isinstance(f, DraconicResilience) for f in char.features]):
|
if char.has_feature(DraconicResilience):
|
||||||
if isinstance(armor, NoArmor):
|
if isinstance(armor, NoArmor):
|
||||||
ac += 3
|
ac += 3
|
||||||
if any([isinstance(f, Defense) for f in char.features]):
|
if char.has_feature(Defense):
|
||||||
if not isinstance(armor, NoArmor):
|
if not isinstance(armor, NoArmor):
|
||||||
ac += 1
|
ac += 1
|
||||||
|
if char.has_feature(SoulOfTheForge):
|
||||||
|
if isinstance(armor, HeavyArmor):
|
||||||
|
ac += 1
|
||||||
# Check if any magic items add to AC
|
# Check if any magic items add to AC
|
||||||
for mitem in char.magic_items:
|
for mitem in char.magic_items:
|
||||||
if hasattr(mitem, 'ac_bonus'):
|
if hasattr(mitem, 'ac_bonus'):
|
||||||
@@ -156,17 +159,17 @@ class Speed():
|
|||||||
if isinstance(speed, str):
|
if isinstance(speed, str):
|
||||||
other_speed = speed[2:]
|
other_speed = speed[2:]
|
||||||
speed = int(speed[:2]) # ignore other speeds, like fly
|
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):
|
if not isinstance(char.armor, HeavyArmor):
|
||||||
speed += 10
|
speed += 10
|
||||||
if isinstance(char.armor, NoArmor) or (char.armor is None):
|
if isinstance(char.armor, NoArmor) or (char.armor is None):
|
||||||
for f in char.features:
|
for f in char.features:
|
||||||
if isinstance(f, UnarmoredMovement):
|
if isinstance(f, UnarmoredMovement):
|
||||||
speed += f.speed_bonus
|
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:
|
if 'swim' not in other_speed:
|
||||||
other_speed += ' ({:d} swim)'.format(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:
|
if 'swim' not in other_speed:
|
||||||
other_speed += ' (30 swim)'
|
other_speed += ' (30 swim)'
|
||||||
return '{:d}{:s}'.format(speed, other_speed)
|
return '{:d}{:s}'.format(speed, other_speed)
|
||||||
|
|||||||
@@ -441,6 +441,16 @@ class Unarmed(MeleeWeapon):
|
|||||||
ability = "strength"
|
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
|
# Custom weapons
|
||||||
class HeavyPunch(MeleeWeapon):
|
class HeavyPunch(MeleeWeapon):
|
||||||
base_damage = "1d4"
|
base_damage = "1d4"
|
||||||
@@ -534,6 +544,6 @@ martial_ranged_weapons = (Blowgun, HandCrossbow, HeavyCrossbow,
|
|||||||
martial_weapons = martial_melee_weapons + martial_ranged_weapons
|
martial_weapons = martial_melee_weapons + martial_ranged_weapons
|
||||||
|
|
||||||
monk_weapons = (Shortsword, Unarmed, Club, Dagger, Handaxe, Javelin,
|
monk_weapons = (Shortsword, Unarmed, Club, Dagger, Handaxe, Javelin,
|
||||||
LightHammer, Mace, Quarterstaff, Sickle, Spear)
|
LightHammer, Mace, Quarterstaff, Sickle, Spear, SunBolt)
|
||||||
|
|
||||||
firearms = (Firearm, Blunderbuss, Pistol, Musket)
|
firearms = (Firearm, Blunderbuss, Pistol, Musket)
|
||||||
|
|||||||
Reference in New Issue
Block a user