mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-06-03 19:38:30 +02:00
Added features for all classes and subclasses
This commit is contained in:
@@ -9,7 +9,7 @@ import importlib.util
|
|||||||
import jinja2
|
import jinja2
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from .stats import Ability, Skill, findattr, ArmorClass, Speed
|
from .stats import Ability, Skill, findattr, ArmorClass, Speed, Initiative
|
||||||
from .dice import read_dice_str
|
from .dice import read_dice_str
|
||||||
from . import (weapons, race, background, spells, armor, monsters,
|
from . import (weapons, race, background, spells, armor, monsters,
|
||||||
exceptions, classes, features, magic_items)
|
exceptions, classes, features, magic_items)
|
||||||
@@ -74,6 +74,7 @@ class Character():
|
|||||||
wisdom = Ability()
|
wisdom = Ability()
|
||||||
charisma = Ability()
|
charisma = Ability()
|
||||||
armor_class = ArmorClass()
|
armor_class = ArmorClass()
|
||||||
|
initiative = Initiative()
|
||||||
speed = Speed()
|
speed = Speed()
|
||||||
inspiration = 0
|
inspiration = 0
|
||||||
_saving_throw_proficiencies = tuple() # use to overwrite class proficiencies
|
_saving_throw_proficiencies = tuple() # use to overwrite class proficiencies
|
||||||
@@ -506,18 +507,6 @@ class Character():
|
|||||||
ability_mod = getattr(self, class_type.spellcasting_ability).modifier
|
ability_mod = getattr(self, class_type.spellcasting_ability).modifier
|
||||||
return (self.proficiency_bonus + ability_mod)
|
return (self.proficiency_bonus + ability_mod)
|
||||||
|
|
||||||
@property
|
|
||||||
def initiative(self) -> str:
|
|
||||||
ini = self.dexterity.modifier
|
|
||||||
if self.has_feature(features.QuickDraw):
|
|
||||||
ini += self.proficiency_bonus
|
|
||||||
ini = '{:+d}'.format(ini)
|
|
||||||
has_advantage = (self.has_feature(features.NaturalExplorerRevised) or
|
|
||||||
self.has_feature(features.FeralInstinct))
|
|
||||||
if has_advantage:
|
|
||||||
ini += '(A)'
|
|
||||||
return ini
|
|
||||||
|
|
||||||
def is_proficient(self, weapon: Weapon):
|
def is_proficient(self, weapon: Weapon):
|
||||||
"""Is the character proficient with this item?
|
"""Is the character proficient with this item?
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ class Hunter(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Hunter"
|
name = "Hunter"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.HuntersPrey]
|
||||||
|
features_by_level[7] = [features.DefensiveTactics]
|
||||||
|
features_by_level[11] = [features.MultiattackRanger]
|
||||||
|
features_by_level[15] = [features.SuperiorHuntersDefense]
|
||||||
|
|
||||||
|
|
||||||
class BeastMaster(SubClass):
|
class BeastMaster(SubClass):
|
||||||
@@ -29,6 +33,10 @@ class BeastMaster(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Beast Master"
|
name = "Beast Master"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.RangersCompanion]
|
||||||
|
features_by_level[7] = [features.ExceptionalTraining]
|
||||||
|
features_by_level[11] = [features.BestialFury]
|
||||||
|
features_by_level[15] = [features.ShareSpells]
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
@@ -43,6 +51,11 @@ class GloomStalker(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Gloom Stalker"
|
name = "Gloom Stalker"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.GloomStalkerMagic, features.DreadAmbusher,
|
||||||
|
features.UmbralSight, features.Darkvision]
|
||||||
|
features_by_level[7] = [features.IronMind]
|
||||||
|
features_by_level[11] = [features.StalkersFlurry]
|
||||||
|
features_by_level[15] = [features.ShadowyDodge]
|
||||||
|
|
||||||
|
|
||||||
class HorizonWalker(SubClass):
|
class HorizonWalker(SubClass):
|
||||||
@@ -57,6 +70,11 @@ class HorizonWalker(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Horizon Walker"
|
name = "Horizon Walker"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.HorizonWalkerMagic,
|
||||||
|
features.DetectPortal, features.PlanarWarrior]
|
||||||
|
features_by_level[7] = [features.EtherealStep]
|
||||||
|
features_by_level[11] = [features.DistantStrike]
|
||||||
|
features_by_level[15] = [features.SpectralDefense]
|
||||||
|
|
||||||
|
|
||||||
class MonsterSlayer(SubClass):
|
class MonsterSlayer(SubClass):
|
||||||
@@ -69,6 +87,11 @@ class MonsterSlayer(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Monster Slayer"
|
name = "Monster Slayer"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.MonsterSlayerMagic, features.HuntersSense,
|
||||||
|
features.SlayersPrey]
|
||||||
|
features_by_level[7] = [features.SupernaturalDefense]
|
||||||
|
features_by_level[11] = [features.MagicUsersNemesis]
|
||||||
|
features_by_level[15] = [features.SlayersCounter]
|
||||||
|
|
||||||
|
|
||||||
class Ranger(CharClass):
|
class Ranger(CharClass):
|
||||||
@@ -88,6 +111,15 @@ class Ranger(CharClass):
|
|||||||
'Survival')
|
'Survival')
|
||||||
num_skill_choices = 3
|
num_skill_choices = 3
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.FavoredEnemy, features.NaturalExplorer]
|
||||||
|
features_by_level[2] = [features.RangerFightingStyle]
|
||||||
|
features_by_level[3] = [features.PrimevalAwareness]
|
||||||
|
features_by_level[5] = [features.ExtraAttackRanger]
|
||||||
|
features_by_level[8] = [features.LandsStride]
|
||||||
|
features_by_level[10] = [features.HideInPlainSight]
|
||||||
|
features_by_level[14] = [features.Vanish]
|
||||||
|
features_by_level[18] = [features.FeralSenses]
|
||||||
|
features_by_level[20] = [features.FoeSlayer]
|
||||||
subclasses_available = (Hunter, BeastMaster, GloomStalker,
|
subclasses_available = (Hunter, BeastMaster, GloomStalker,
|
||||||
HorizonWalker, MonsterSlayer)
|
HorizonWalker, MonsterSlayer)
|
||||||
spellcasting_ability = 'wisdom'
|
spellcasting_ability = 'wisdom'
|
||||||
@@ -142,6 +174,12 @@ class HunterConclave(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Hunter Conclave"
|
name = "Hunter Conclave"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.HuntersPrey]
|
||||||
|
features_by_level[5] = [features.ExtraAttackRanger]
|
||||||
|
features_by_level[7] = [features.DefensiveTactics]
|
||||||
|
features_by_level[11] = [features.MultiattackRanger]
|
||||||
|
features_by_level[15] = [features.SuperiorHuntersDefense]
|
||||||
|
|
||||||
|
|
||||||
class DeepStalkerConclave(SubClass):
|
class DeepStalkerConclave(SubClass):
|
||||||
@@ -154,6 +192,11 @@ class DeepStalkerConclave(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Deep Stalker Conclave"
|
name = "Deep Stalker Conclave"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.UnderdarkScout, features.DeepStalkerMagic]
|
||||||
|
features_by_level[5] = [features.ExtraAttackRanger]
|
||||||
|
features_by_level[7] = [features.IronMind]
|
||||||
|
features_by_level[11] = [features.StalkersFlurry]
|
||||||
|
features_by_level[15] = [features.StalkersDodge]
|
||||||
|
|
||||||
|
|
||||||
class RevisedRanger(Ranger):
|
class RevisedRanger(Ranger):
|
||||||
@@ -165,7 +208,7 @@ class RevisedRanger(Ranger):
|
|||||||
features_by_level[3] = [features.PrimevalAwarenessRevised]
|
features_by_level[3] = [features.PrimevalAwarenessRevised]
|
||||||
features_by_level[6] = [features.GreaterFavoredEnemy]
|
features_by_level[6] = [features.GreaterFavoredEnemy]
|
||||||
features_by_level[8] = [features.FleetOfFoot]
|
features_by_level[8] = [features.FleetOfFoot]
|
||||||
features_by_level[10] = [features.HideInPlainSight]
|
features_by_level[10] = [features.HideInPlainSightRevised]
|
||||||
features_by_level[14] = [features.Vanish]
|
features_by_level[14] = [features.Vanish]
|
||||||
features_by_level[18] = [features.FeralSenses]
|
features_by_level[18] = [features.FeralSenses]
|
||||||
features_by_level[20] = [features.FoeSlayer]
|
features_by_level[20] = [features.FoeSlayer]
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ class Thief(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Thief"
|
name = "Thief"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.FastHands, features.SecondStoryWork]
|
||||||
|
features_by_level[9] = [features.SupremeSneak]
|
||||||
|
features_by_level[13] = [features.UseMagicDevice]
|
||||||
|
features_by_level[17] = [features.ThiefsReflexes]
|
||||||
|
|
||||||
|
|
||||||
class Assassin(SubClass):
|
class Assassin(SubClass):
|
||||||
@@ -26,7 +30,12 @@ class Assassin(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Assassin"
|
name = "Assassin"
|
||||||
|
_proficiencies_text = ('disguise kit', "poisoner's kit")
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.Assassinate]
|
||||||
|
features_by_level[9] = [features.InfiltrationExpertise]
|
||||||
|
features_by_level[13] = [features.Imposter]
|
||||||
|
features_by_level[17] = [features.DeathStrike]
|
||||||
|
|
||||||
|
|
||||||
class ArcaneTrickster(SubClass):
|
class ArcaneTrickster(SubClass):
|
||||||
@@ -38,6 +47,10 @@ class ArcaneTrickster(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Arcane Trickster"
|
name = "Arcane Trickster"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.MageHandLegerdemain]
|
||||||
|
features_by_level[9] = [features.MagicalAmbush]
|
||||||
|
features_by_level[13] = [features.VersatileTrickster]
|
||||||
|
features_by_level[17] = [features.SpellThief]
|
||||||
spellcasting_ability = 'intelligence'
|
spellcasting_ability = 'intelligence'
|
||||||
multiclass_spellslots_by_level = {
|
multiclass_spellslots_by_level = {
|
||||||
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
|
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
|
||||||
@@ -76,6 +89,11 @@ class Inquisitive(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Inquisitive"
|
name = "Inquisitive"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.EarForDeceit, features.EyeForDetail,
|
||||||
|
features.InsightfulFighting]
|
||||||
|
features_by_level[9] = [features.SteadyEye]
|
||||||
|
features_by_level[13] = [features.UnerringEye]
|
||||||
|
features_by_level[17] = [features.EyeForWeakness]
|
||||||
|
|
||||||
|
|
||||||
class Mastermind(SubClass):
|
class Mastermind(SubClass):
|
||||||
@@ -87,6 +105,11 @@ class Mastermind(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Mastermind"
|
name = "Mastermind"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.MasterOfIntrigue,
|
||||||
|
features.MasterOfTactics]
|
||||||
|
features_by_level[9] = [features.InsightfulManipulator]
|
||||||
|
features_by_level[13] = [features.Misdirection]
|
||||||
|
features_by_level[17] = [features.SoulOfDeceit]
|
||||||
|
|
||||||
|
|
||||||
class Scout(SubClass):
|
class Scout(SubClass):
|
||||||
@@ -99,7 +122,12 @@ class Scout(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Scout"
|
name = "Scout"
|
||||||
|
skill_proficiencies = ("nature", "survival")
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.Skirmisher, features.Survivalist]
|
||||||
|
features_by_level[9] = [features.SuperiorMobility]
|
||||||
|
features_by_level[13] = [features.AmbushMaster]
|
||||||
|
features_by_level[17] = [features.SuddenStrike]
|
||||||
|
|
||||||
|
|
||||||
class Swashbuckler(SubClass):
|
class Swashbuckler(SubClass):
|
||||||
@@ -113,6 +141,10 @@ class Swashbuckler(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Swashbuckler"
|
name = "Swashbuckler"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[3] = [features.FancyFootwork, features.RakishAudacity]
|
||||||
|
features_by_level[9] = [features.Panache]
|
||||||
|
features_by_level[13] = [features.ElegantManeuver]
|
||||||
|
features_by_level[17] = [features.MasterDuelist]
|
||||||
|
|
||||||
|
|
||||||
class Rogue(CharClass):
|
class Rogue(CharClass):
|
||||||
|
|||||||
@@ -15,7 +15,13 @@ class DraconicBloodline(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Draconic Bloodline"
|
name = "Draconic Bloodline"
|
||||||
|
languages = ('draconic',)
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.DragonAncestor,
|
||||||
|
features.DraconicResilience]
|
||||||
|
features_by_level[6] = [features.ElementalAffinity]
|
||||||
|
features_by_level[14] = [features.DragonWings]
|
||||||
|
features_by_level[18] = [features.DraconicPresence]
|
||||||
|
|
||||||
|
|
||||||
class WildMagic(SubClass):
|
class WildMagic(SubClass):
|
||||||
@@ -58,6 +64,10 @@ class DivineSoul(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Divine Soul"
|
name = "Divine Soul"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.DivineMagic, features.FavoredByTheGods]
|
||||||
|
features_by_level[6] = [features.EmpoweredHealing]
|
||||||
|
features_by_level[14] = [features.OtherworldlyWings]
|
||||||
|
features_by_level[18] = [features.UnearthlyRecovery]
|
||||||
|
|
||||||
|
|
||||||
class ShadowMagic(SubClass):
|
class ShadowMagic(SubClass):
|
||||||
@@ -75,6 +85,12 @@ class ShadowMagic(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "Shadow Magic"
|
name = "Shadow Magic"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.EyesOfTheDark,
|
||||||
|
features.SuperiorDarkvision,
|
||||||
|
features.StrengthOfTheGrave]
|
||||||
|
features_by_level[6] = [features.HoundOfIllOmen]
|
||||||
|
features_by_level[14] = [features.ShadowWalk]
|
||||||
|
features_by_level[18] = [features.UmbralForm]
|
||||||
|
|
||||||
|
|
||||||
class StormSorcery(SubClass):
|
class StormSorcery(SubClass):
|
||||||
@@ -92,7 +108,12 @@ class StormSorcery(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Storm Sorcery"
|
name = "Storm Sorcery"
|
||||||
|
languages = ("primordial",)
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.TempestuousMagic]
|
||||||
|
features_by_level[6] = [features.HeartOfTheStorm, features.StormGuide]
|
||||||
|
features_by_level[14] = [features.StormsFury]
|
||||||
|
features_by_level[18] = [features.WindSoul]
|
||||||
|
|
||||||
|
|
||||||
class Sorceror(CharClass):
|
class Sorceror(CharClass):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from .. import (weapons, features)
|
from .. import (weapons, features, spells)
|
||||||
from .classes import CharClass, SubClass
|
from .classes import CharClass, SubClass
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
@@ -17,6 +17,10 @@ class Archfey(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "The Archfey Patron"
|
name = "The Archfey Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.FeyPresence]
|
||||||
|
features_by_level[6] = [features.MistyEscape]
|
||||||
|
features_by_level[10] = [features.BeguilingDefenses]
|
||||||
|
features_by_level[14] = [features.DarkDelirium]
|
||||||
|
|
||||||
|
|
||||||
class Fiend(SubClass):
|
class Fiend(SubClass):
|
||||||
@@ -54,6 +58,10 @@ class GreatOldOne(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "The Great Old One Patron"
|
name = "The Great Old One Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.AwakenedMind]
|
||||||
|
features_by_level[6] = [features.EntropicWard]
|
||||||
|
features_by_level[10] = [features.ThoughtShield]
|
||||||
|
features_by_level[14] = [features.CreateThrall]
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
@@ -73,6 +81,10 @@ class Undying(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "The Undying Patron"
|
name = "The Undying Patron"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.AmongTheDead]
|
||||||
|
features_by_level[6] = [features.DefyDeath]
|
||||||
|
features_by_level[10] = [features.UndyingNature]
|
||||||
|
features_by_level[14] = [features.IndestructibleLife]
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
@@ -93,7 +105,12 @@ class Celestial(SubClass):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "The Celestial Patron"
|
name = "The Celestial Patron"
|
||||||
|
spells_known = spells_prepared = (spells.Light, spells.SacredFlame)
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.HealingLight]
|
||||||
|
features_by_level[6] = [features.RadiantSoul]
|
||||||
|
features_by_level[10] = [features.CelestialResilience]
|
||||||
|
features_by_level[14] = [features.SearingVengeance]
|
||||||
|
|
||||||
|
|
||||||
class Hexblade(SubClass):
|
class Hexblade(SubClass):
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ class Abjuration(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Abjuration"
|
name = "School of Abjuration"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.AbjurationSavant, features.ArcaneWard]
|
||||||
|
features_by_level[6] = [features.ProjectedWard]
|
||||||
|
features_by_level[10] = [features.ImprovedAbjuration]
|
||||||
|
features_by_level[14] = [features.SpellResistance]
|
||||||
|
|
||||||
|
|
||||||
class Conjuration(SubClass):
|
class Conjuration(SubClass):
|
||||||
@@ -30,6 +34,10 @@ class Conjuration(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Conjuration"
|
name = "School of Conjuration"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.ConjurationSavant, features.MinorIllusion]
|
||||||
|
features_by_level[6] = [features.BenignTransposition]
|
||||||
|
features_by_level[10] = [features.FocusedConjuration]
|
||||||
|
features_by_level[14] = [features.DurableSummons]
|
||||||
|
|
||||||
|
|
||||||
class Divination(SubClass):
|
class Divination(SubClass):
|
||||||
@@ -42,6 +50,10 @@ class Divination(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Divination"
|
name = "School of Divination"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.DivinationSavant, features.Portent]
|
||||||
|
features_by_level[6] = [features.ExpertDivination]
|
||||||
|
features_by_level[10] = [features.TheThirdEye]
|
||||||
|
features_by_level[14] = [features.GreaterPortent]
|
||||||
|
|
||||||
|
|
||||||
class Enchantment(SubClass):
|
class Enchantment(SubClass):
|
||||||
@@ -54,6 +66,10 @@ class Enchantment(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Enchantment"
|
name = "School of Enchantment"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.EnchantmentSavant, features.HypnoticGaze]
|
||||||
|
features_by_level[6] = [features.InstinctiveGaze]
|
||||||
|
features_by_level[10] = [features.SplitEnchantment]
|
||||||
|
features_by_level[14] = [features.AlterMemories]
|
||||||
|
|
||||||
|
|
||||||
class Evocation(SubClass):
|
class Evocation(SubClass):
|
||||||
@@ -67,6 +83,10 @@ class Evocation(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Evocation"
|
name = "School of Evocation"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.EvocationSavant, features.SculptSpells]
|
||||||
|
features_by_level[6] = [features.PotentCantrip]
|
||||||
|
features_by_level[10] = [features.EmpoweredEvocation]
|
||||||
|
features_by_level[14] = [features.Overchannel]
|
||||||
|
|
||||||
|
|
||||||
class Illusion(SubClass):
|
class Illusion(SubClass):
|
||||||
@@ -80,6 +100,11 @@ class Illusion(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Illusion"
|
name = "School of Illusion"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.IllusionSavant,
|
||||||
|
features.ImprovedMinorIllusion]
|
||||||
|
features_by_level[6] = [features.MalleableIllusions]
|
||||||
|
features_by_level[10] = [features.IllusorySelf]
|
||||||
|
features_by_level[14] = [features.IllusoryReality]
|
||||||
|
|
||||||
|
|
||||||
class Necromancy(SubClass):
|
class Necromancy(SubClass):
|
||||||
@@ -96,6 +121,10 @@ class Necromancy(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Necromancy"
|
name = "School of Necromancy"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.NecromancySavant, features.GrimHarvest]
|
||||||
|
features_by_level[6] = [features.UndeadThralls]
|
||||||
|
features_by_level[10] = [features.InuredToUndeath]
|
||||||
|
features_by_level[14] = [features.CommandUndead]
|
||||||
|
|
||||||
|
|
||||||
class Transmutation(SubClass):
|
class Transmutation(SubClass):
|
||||||
@@ -113,10 +142,15 @@ class Transmutation(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of Transmutation"
|
name = "School of Transmutation"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.TransmutationSavant,
|
||||||
|
features.MinorAlchemy]
|
||||||
|
features_by_level[6] = [features.TransmutersStone]
|
||||||
|
features_by_level[10] = [features.Shapechanger]
|
||||||
|
features_by_level[14] = [features.MasterTransmuter]
|
||||||
|
|
||||||
|
|
||||||
# SCAG
|
# SCAG
|
||||||
class Bladeslinging(SubClass):
|
class Bladesinging(SubClass):
|
||||||
"""**Restriction: Elves Only**
|
"""**Restriction: Elves Only**
|
||||||
|
|
||||||
Bladesingers are elves who bravely defend their people and lands. They are
|
Bladesingers are elves who bravely defend their people and lands. They are
|
||||||
@@ -126,8 +160,14 @@ class Bladeslinging(SubClass):
|
|||||||
magic into devastating attacks and a cunning defense
|
magic into devastating attacks and a cunning defense
|
||||||
|
|
||||||
"""
|
"""
|
||||||
name = "School of Bladeslinging"
|
name = "School of Bladesinging"
|
||||||
|
_proficiencies_text = ('light armor',)
|
||||||
|
skill_proficiencies = ('performance',)
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.Bladesong,]
|
||||||
|
features_by_level[6] = [features.ExtraAttackBladesinging]
|
||||||
|
features_by_level[10] = [features.SongOfDefense]
|
||||||
|
features_by_level[14] = [features.SongOfVictory]
|
||||||
|
|
||||||
|
|
||||||
# XGTE
|
# XGTE
|
||||||
@@ -154,6 +194,10 @@ class WarMagic(SubClass):
|
|||||||
"""
|
"""
|
||||||
name = "School of War Magic"
|
name = "School of War Magic"
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[2] = [features.ArcaneDeflection, features.TacticalWit]
|
||||||
|
features_by_level[6] = [features.PowerSurge]
|
||||||
|
features_by_level[10] = [features.DurableMagic]
|
||||||
|
features_by_level[14] = [features.DeflectingShroud]
|
||||||
|
|
||||||
|
|
||||||
class Wizard(CharClass):
|
class Wizard(CharClass):
|
||||||
@@ -172,9 +216,12 @@ class Wizard(CharClass):
|
|||||||
class_skill_choices = ('Arcana', 'History', 'Investigation',
|
class_skill_choices = ('Arcana', 'History', 'Investigation',
|
||||||
'Medicine', 'Religion')
|
'Medicine', 'Religion')
|
||||||
features_by_level = defaultdict(list)
|
features_by_level = defaultdict(list)
|
||||||
|
features_by_level[1] = [features.ArcaneRecovery]
|
||||||
|
features_by_level[18] = [features.SpellMastery]
|
||||||
|
features_by_level[18] = [features.SignatureSpells]
|
||||||
subclasses_available = (Abjuration, Conjuration, Divination, Enchantment,
|
subclasses_available = (Abjuration, Conjuration, Divination, Enchantment,
|
||||||
Evocation, Illusion, Necromancy, Transmutation,
|
Evocation, Illusion, Necromancy, Transmutation,
|
||||||
Bladeslinging, WarMagic)
|
Bladesinging, WarMagic)
|
||||||
spellcasting_ability = 'intelligence'
|
spellcasting_ability = 'intelligence'
|
||||||
spell_slots_by_level = {
|
spell_slots_by_level = {
|
||||||
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
|
# char_lvl: (cantrips, 1st, 2nd, 3rd, ...)
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ class LandsStride(Feature):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Land's Stride"
|
name = "Land's Stride"
|
||||||
source = "Druid (Circle of the Land)"
|
source = "Class (Many)"
|
||||||
|
|
||||||
|
|
||||||
class NaturesWard(Feature):
|
class NaturesWard(Feature):
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ class EmissaryOfRedemption(Feature):
|
|||||||
--Whenever a creature hits you with an attack, it takes radiant damage
|
--Whenever a creature hits you with an attack, it takes radiant damage
|
||||||
equal to half the damage you take from the attack.
|
equal to half the damage you take from the attack.
|
||||||
|
|
||||||
If you attack a creature, cast a spell on it, or deal dam- age to it by any
|
If you attack a creature, cast a spell on it, or deal damage to it by any
|
||||||
means but this feature, neither benefit works against that creature until
|
means but this feature, neither benefit works against that creature until
|
||||||
you finish a long rest
|
you finish a long rest
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,61 @@
|
|||||||
from .features import Feature, FeatureSelector
|
from .features import Feature, FeatureSelector
|
||||||
from .. import (weapons, armor)
|
from .. import (weapons, armor, spells)
|
||||||
|
from .rogue import UncannyDodge, Evasion
|
||||||
|
|
||||||
|
|
||||||
|
# PHB
|
||||||
|
class FavoredEnemy(Feature):
|
||||||
|
"""Beginning at 1st level, you have significant experience studying, tracking,
|
||||||
|
hunting, and even talking to a certain type of enemy.
|
||||||
|
|
||||||
|
Choose a type of favored enemy: aberrations, beasts, celestials,
|
||||||
|
constructs, dragons, elementals, fey, fiends, giants, monstrosities, oozes,
|
||||||
|
plants, or undead. Alternatively, you can select two races of humanoid
|
||||||
|
(such as gnolls and orcs) as favored enemies. You have advantage on Wisdom
|
||||||
|
(Survival) checks to track your favored enemies, as well as on Intelligence
|
||||||
|
checks to recall information about them.
|
||||||
|
|
||||||
|
When you gain this feature, you also learn one language of your choice that
|
||||||
|
is spoken by your favored enemies, if they speak one at all. You choose one
|
||||||
|
additional favored enemy, as well as an associated language, at 6th and
|
||||||
|
14th level. As you gain levels, your choices should reflect the types of
|
||||||
|
monsters you have encountered on your adventures.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Favored Enemy"
|
||||||
|
source = "Ranger"
|
||||||
|
languages = ("[Select One]",)
|
||||||
|
|
||||||
|
|
||||||
|
class NaturalExplorer(Feature):
|
||||||
|
"""You are particularly familiar with one type of natural environment and are
|
||||||
|
adept at traveling and surviving in such regions. Choose one type of
|
||||||
|
favored terrain: arctic, coast, desert, forest, grassland, mountain, swamp,
|
||||||
|
or the Underdark. You choose additional favored terrain types at 6th and
|
||||||
|
10th
|
||||||
|
|
||||||
|
When you make an Intelligence or Wisdom check related to your favored
|
||||||
|
terrain, your proficiency bonus is doubled if you are using a skill that
|
||||||
|
you’re proficient in. While traveling for an hour or more in your favored
|
||||||
|
terrain, you gain the following benefits:
|
||||||
|
|
||||||
|
-- Difficult terrain doesn’t slow your group’s travel.
|
||||||
|
|
||||||
|
-- Your group can’t become lost except by magical means.
|
||||||
|
|
||||||
|
-- Even when you are engaged in another activity while traveling
|
||||||
|
(such as foraging, navigating, or tracking), you remain alert to danger.
|
||||||
|
|
||||||
|
-- If you are traveling alone, you can move stealthily at a normal pace.
|
||||||
|
|
||||||
|
-- When you forage, you find twice as much food as you normally would.
|
||||||
|
|
||||||
|
-- While tracking other creatures, you also learn their exact number, their
|
||||||
|
sizes, and how long ago they passed through the area.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Natural Explorer"
|
||||||
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
class Archery(Feature):
|
class Archery(Feature):
|
||||||
@@ -77,6 +133,587 @@ class RangerFightingStyle(FeatureSelector):
|
|||||||
source = "Ranger"
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
class PrimevalAwareness(Feature):
|
||||||
|
"""Beginning at 3rd level, you can use your action and expend one ranger spell
|
||||||
|
slot to focus your awareness on the region around you. For 1 minute per
|
||||||
|
level of the spell slot you expend, you can sense whether the following
|
||||||
|
types of creatures are present within 1 mile of you (or within up to 6
|
||||||
|
miles if you are in your favored terrain): aberrations, celestials,
|
||||||
|
dragons, elementals, fey, fiends, and undead. This feature doesn’t reveal
|
||||||
|
the creatures’ location or number.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Primeval Awareness"
|
||||||
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
class ExtraAttackRanger(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 = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
class HideInPlainSight(Feature):
|
||||||
|
"""Starting at 10th level, you can spend 1 minute creating camouflage for
|
||||||
|
yourself. You must have access to fresh mud, dirt, plants, soot, and other
|
||||||
|
naturally occurring materials with which to create your camouflage. Once
|
||||||
|
you are camouflaged in this way, you can try to hide by pressing yourself
|
||||||
|
up against a solid surface, such as a tree or wall, that is at least as
|
||||||
|
tall and wide as you are.
|
||||||
|
|
||||||
|
You gain a +10 bonus to Dexterity (Stealth) checks as long as you remain
|
||||||
|
there without moving or taking actions. Once you move or take an action or
|
||||||
|
a reaction, you must camouflage yourself again to gain this benefit
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Hide in Plain Sight"
|
||||||
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
class Vanish(Feature):
|
||||||
|
"""Starting at 14th level, you can use the Hide action as a bonus action on
|
||||||
|
your turn. Also, you can’t be tracked by nonmagical means, unless you
|
||||||
|
choose to leave a trail.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Vanish"
|
||||||
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
class FeralSenses(Feature):
|
||||||
|
"""At 18th level, you gain preternatural senses that help you fight creatures
|
||||||
|
you can’t see. When you attack a creature you can’t see, your inability to
|
||||||
|
see it doesn’t impose disadvantage on your attack rolls against it. You are
|
||||||
|
also aware of the location of any invisible creature within 30 feet of you,
|
||||||
|
provided that the creature isn’t hidden from you and you aren’t blinded or
|
||||||
|
deafened
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Feral Senses"
|
||||||
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
class FoeSlayer(Feature):
|
||||||
|
"""At 20th level, you become an unparalleled hunter of your enemies. Once on
|
||||||
|
each of your turns, you can add your Wisdom modifier to the attack roll or
|
||||||
|
the damage roll of an attack you make against one o f your favored
|
||||||
|
enemies. You can choose to use this feature before or after the roll, but
|
||||||
|
before any effects of the roll are applied.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Foe Slayer"
|
||||||
|
source = "Ranger"
|
||||||
|
|
||||||
|
|
||||||
|
# Hunter
|
||||||
|
class ColossusSlayer(Feature):
|
||||||
|
"""Your tenacity can wear down the most potent foes. When you hit a creature
|
||||||
|
with a weapon attack, the creature takes an extra 1d8 damage if it’s below
|
||||||
|
its hit point maximum. You can deal this extra damage only once per turn.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Colossus Slayer"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class GiantKiller(Feature):
|
||||||
|
"""When a Large or larger creature within 5 feet of you hits or misses you
|
||||||
|
with an attack, you can use your reaction to attack that creature
|
||||||
|
immediately after its attack, provided that you can see the creature.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Giant Killer"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class HordeBreaker(Feature):
|
||||||
|
"""Once on each o f your turns when you make a weapon attack, you can make
|
||||||
|
another attack with the same weapon against a different creature that is
|
||||||
|
within 5 feet of the original target and within range of your weapon.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Horde Breaker"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class HuntersPrey(FeatureSelector):
|
||||||
|
"""Select a Hunter's Prey option in "feature_choices" in your .py file from
|
||||||
|
one of:
|
||||||
|
|
||||||
|
colossus slayer
|
||||||
|
|
||||||
|
giant killer
|
||||||
|
|
||||||
|
horde breaker
|
||||||
|
|
||||||
|
"""
|
||||||
|
options = {'colossus slayer': ColossusSlayer,
|
||||||
|
'giant killer': GiantKiller,
|
||||||
|
'horde breaker': HordeBreaker}
|
||||||
|
name = "Hunter's Prey (Select One)"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class EscapeTheHorde(Feature):
|
||||||
|
"""Opportunity attacks against you are made with disadvantage
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Escape the Horde"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class MultiattackDefense(Feature):
|
||||||
|
"""When a creature hits you with an attack, you gain a +4 bonus to AC against
|
||||||
|
all subsequent attacks made by that creature for the rest of the turn.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Multiattack Defense"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class SteelWill(Feature):
|
||||||
|
"""You have advantage on saving throws against being frightened.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Steel Will"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class DefensiveTactics(FeatureSelector):
|
||||||
|
"""Select a Defensive Tactics option in "feature_choices" in your .py file from
|
||||||
|
one of:
|
||||||
|
|
||||||
|
escape the horde
|
||||||
|
|
||||||
|
multiattack defense
|
||||||
|
|
||||||
|
steel will
|
||||||
|
|
||||||
|
"""
|
||||||
|
options = {'escape the horde': EscapeTheHorde,
|
||||||
|
'multiattack defense': MultiattackDefense,
|
||||||
|
'steel will': SteelWill}
|
||||||
|
name = "Defensive Tactics (Select One)"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class Volley(Feature):
|
||||||
|
"""You can use your action to make a ranged attack against any number of
|
||||||
|
creatures within 10 feet o f a point you can see within your weapon’s
|
||||||
|
range. You must have ammunition for each target, as normal, and you make a
|
||||||
|
separate attack roll for each target
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Volley"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class WhirlwindAttack(Feature):
|
||||||
|
"""You can use your action to make a melee attack against any number o f
|
||||||
|
creatures within 5 feet of you, with a separate attack roll for each target
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Whirlwind Attack"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class MultiattackRanger(FeatureSelector):
|
||||||
|
"""Select a Multiattack option in "feature_choices" in your .py file from
|
||||||
|
one of:
|
||||||
|
|
||||||
|
volley
|
||||||
|
|
||||||
|
whirlwind attack
|
||||||
|
|
||||||
|
"""
|
||||||
|
options = {'volley': Volley,
|
||||||
|
'whirlwind attack': WhirlwindAttack}
|
||||||
|
name = "Multiattack (Select One)"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class StandAgainstTheTide(Feature):
|
||||||
|
"""When a hostile creature misses you with a melee attack, you can use your
|
||||||
|
reaction to force that creature to repeat the same attack against another
|
||||||
|
creature (other than itself) of your choice
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Stand Against the Tide"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
class SuperiorHuntersDefense(FeatureSelector):
|
||||||
|
"""Select a Superior Hunter's Defense option in "feature_choices" in your .py
|
||||||
|
file from one of:
|
||||||
|
|
||||||
|
evasion
|
||||||
|
|
||||||
|
stand against the tide
|
||||||
|
|
||||||
|
uncanny dodge
|
||||||
|
|
||||||
|
"""
|
||||||
|
options = {'evasion': Evasion,
|
||||||
|
'stand against of the tide': StandAgainstTheTide,
|
||||||
|
'uncanny dodge': UncannyDodge}
|
||||||
|
name = "Superior Hunter's Defense (Select One)"
|
||||||
|
source = "Ranger (Hunter)"
|
||||||
|
|
||||||
|
|
||||||
|
# Beast Master
|
||||||
|
class RangersCompanion(Feature):
|
||||||
|
"""At 3rd level, you gain a beast companion that accompanies you on your
|
||||||
|
adventures and is trained to fight alongside you. Choose a beast that is no
|
||||||
|
larger than Medium and that has a challenge rating of 1/4 or lower
|
||||||
|
(appendix D presents statistics for the hawk, mastiff, and panther as
|
||||||
|
examples). Add your proficiency bonus to the beast’s AC, attack rolls, and
|
||||||
|
damage rolls, as well as to any saving throws and skills it is proficient
|
||||||
|
in. Its hit point maximum equals its normal maximum or four times your
|
||||||
|
ranger level, whichever is higher.
|
||||||
|
|
||||||
|
The beast obeys your commands as best as it can. It takes its turn on your
|
||||||
|
initiative, though it doesn’t take an action unless you command it to. On
|
||||||
|
your turn, you can verbally command the beast where to move (no action
|
||||||
|
required by you). You can use your action to verbally command it to take
|
||||||
|
the Attack, Dash, Disengage, Dodge, or Help action. Once you have the Extra
|
||||||
|
Attack feature, you can make one weapon attack yourself when you command
|
||||||
|
the beast to take the Attack action.
|
||||||
|
|
||||||
|
While traveling through your favored terrain with only the beast, you can
|
||||||
|
move stealthily at a normal pace. If the beast dies, you can obtain another
|
||||||
|
one by spending 8 hours magically bonding with another beast that isn’t
|
||||||
|
hostile to you, either the same type of beast as before or a different one.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Ranger's Companion"
|
||||||
|
source = "Ranger (Beast Master)"
|
||||||
|
|
||||||
|
|
||||||
|
class ExceptionalTraining(Feature):
|
||||||
|
"""Beginning at 7th level, on any of your turns when your beast companion
|
||||||
|
doesn’t attack, you can use a bonus action to command the beast to take the
|
||||||
|
Dash, Disengage, Dodge, or Help action on its turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Exceptional Training"
|
||||||
|
source = "Ranger (Beast Master)"
|
||||||
|
|
||||||
|
|
||||||
|
class BestialFury(Feature):
|
||||||
|
"""Starting at 11th level, your beast companion can make two attacks when you
|
||||||
|
command it to use the Attack action.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Bestial Fury"
|
||||||
|
source = "Ranger (Beast Master)"
|
||||||
|
|
||||||
|
|
||||||
|
class ShareSpells(Feature):
|
||||||
|
"""Beginning at 15th level, when you cast a spell targeting yourself, you can
|
||||||
|
also affect your beast companion with the spell if the beast is within 30
|
||||||
|
feet of you
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Share Spells"
|
||||||
|
source = "Ranger (Beast Master)"
|
||||||
|
|
||||||
|
|
||||||
|
# Gloom Stalker
|
||||||
|
class GloomStalkerMagic(Feature):
|
||||||
|
"""Starting at 3rd level, you learn an additional spell when you reach certain
|
||||||
|
levels in this class, as shown in the Gloom Stalker Spells table. The spell
|
||||||
|
counts as a ranger spell for you, but it doesn't count against the number
|
||||||
|
of ranger spells you know
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Gloom Stalker Magic"
|
||||||
|
source = "Ranger (Gloom Stalker)"
|
||||||
|
_spells = {3: [spells.DisguiseSelf],
|
||||||
|
5: [spells.RopeTrick],
|
||||||
|
9: [spells.Fear],
|
||||||
|
13: [spells.GreaterInvisibility],
|
||||||
|
17: [spells.Seeming]}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def spells_prepared(self):
|
||||||
|
level = self.owner.Ranger.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 DreadAmbusher(Feature):
|
||||||
|
"""At 3rd level, you master the art of the ambush. You can give yourself a
|
||||||
|
bonus to your initiative rolls equal to your Wisdom modifier. At the start
|
||||||
|
of your first turn of each combat, your walking speed increases by 10 feet,
|
||||||
|
which lasts until the end of that turn. If you take the Attack action on
|
||||||
|
that turn, you can make one additional weapon attack as part of that
|
||||||
|
action. If that attack hits, the target takes an extra 1d8 damage of the
|
||||||
|
weapons damage type.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = 'Dread Ambusher'
|
||||||
|
source = "Ranger (Gloom Stalker)"
|
||||||
|
|
||||||
|
|
||||||
|
class UmbralSight(Feature):
|
||||||
|
"""At 3rd level, you gain darkvision out to a range of 60 feet. If you already
|
||||||
|
have darkvision from your race, its range increases by 30 feet. You are
|
||||||
|
also adept at evading creatures that rely on darkvision. While in darkness,
|
||||||
|
you are invisible to any creature that relies on darkvision to see you in
|
||||||
|
that darkness.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Umbral Sight"
|
||||||
|
source = "Ranger (Gloom Stalker)"
|
||||||
|
|
||||||
|
|
||||||
|
class IronMind(Feature):
|
||||||
|
"""By 7th level, you have honed your ability to resist the mind—altering
|
||||||
|
powers of your prey. You gain proficiency in Wisdom saving throws. Ifyou
|
||||||
|
already have this proficiency, you instead gain proficiency in
|
||||||
|
Intelligence or Charisma saving throws (your choice)
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Iron Mind"
|
||||||
|
source = "Ranger (Gloom Stalker)"
|
||||||
|
|
||||||
|
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 StalkersFlurry(Feature):
|
||||||
|
"""At 11th level, you learn to attack with such unexpected speed that you can
|
||||||
|
turn a miss into another strike. Once on each of your turns when you miss
|
||||||
|
with a weapon attack, you can make another weapon attack as part of the
|
||||||
|
same action
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Stalker's Flurry"
|
||||||
|
source = "Ranger (Gloom Stalker)"
|
||||||
|
|
||||||
|
|
||||||
|
class ShadowyDodge(Feature):
|
||||||
|
"""Starting at 15th level, you can dodge in unforeseen ways, with wisps of
|
||||||
|
supernatural shadow around you. Whenever a creature makes an attack roll
|
||||||
|
against you and doesn’t have advantage on the roll, you can use your
|
||||||
|
reaction to impose disadvantage on it. You must use this feature before you
|
||||||
|
know the outcome of the attack roll.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Shadowy Dodge"
|
||||||
|
source = "Ranger (Gloom Stalker)"
|
||||||
|
|
||||||
|
|
||||||
|
# Horizon Walker
|
||||||
|
class HorizonWalkerMagic(Feature):
|
||||||
|
"""Starting at 3rd level, you learn an additional spell when you reach certain
|
||||||
|
levels in this class, as shown in the Horizon Walker Spells table. The spell
|
||||||
|
counts as a ranger spell for you, but it doesn't count against the number
|
||||||
|
of ranger spells you know
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Horizon Walker Magic"
|
||||||
|
source = "Ranger (Horizon Walker)"
|
||||||
|
_spells = {3: [spells.ProtectionFromEvilAndGood],
|
||||||
|
5: [spells.MistyStep],
|
||||||
|
9: [spells.Haste],
|
||||||
|
13: [spells.Banishment],
|
||||||
|
17: [spells.TeleportationCircle]}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def spells_prepared(self):
|
||||||
|
level = self.owner.Ranger.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 DetectPortal(Feature):
|
||||||
|
"""At 3rd level, you gain the ability to magically sense the presence of a
|
||||||
|
planar portal. As an action, you detect the distance and direction to the
|
||||||
|
closest planar portal within 1 mile of you. Once you use this feature, you
|
||||||
|
can’t use it again until you finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Detect Portal"
|
||||||
|
source = "Ranger (Horizon Walker)"
|
||||||
|
|
||||||
|
|
||||||
|
class PlanarWarrior(Feature):
|
||||||
|
"""At 3rd level, you learn to draw on the energy of the multiverse to
|
||||||
|
augment your attacks. As a bonus action, choose one creature you can see
|
||||||
|
within 30 feet of you. The next time you hit that creature on this turn
|
||||||
|
with a weapon attack, all damage dealt by the attack becomes force damage,
|
||||||
|
and the creature takes an extra 1d8 force damage from the attack. When you
|
||||||
|
reach 11th level in this class, the extra damage increases to 2d8.
|
||||||
|
|
||||||
|
"""
|
||||||
|
_name = "Planar Warrior"
|
||||||
|
source = "Ranger (Horizon Walker)"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
if self.owner.Ranger.level < 11:
|
||||||
|
return self._name + " (1d8/f)"
|
||||||
|
else:
|
||||||
|
return self._name + " (2d8/f)"
|
||||||
|
|
||||||
|
|
||||||
|
class EtherealStep(Feature):
|
||||||
|
"""At 7th level, you learn to step through the Ethereal Plane. As a bonus
|
||||||
|
action, you can cast the etherealncss spell with this feature, without
|
||||||
|
expending a spell slot, but the spell ends at the end of the current
|
||||||
|
turn. Once you use this feature, you can’t use it again until you finish a
|
||||||
|
short or long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Ethereal Step"
|
||||||
|
source = "Ranger (Horizon Walker)"
|
||||||
|
|
||||||
|
|
||||||
|
class DistantStrike(Feature):
|
||||||
|
"""At 11th level, you gain the ability to pass between the planes in the blink
|
||||||
|
of an eye. When you take the Attack action, you can teleport up to 10 feet
|
||||||
|
before each attack to an unoccupied space you can see. Ifyou attack at
|
||||||
|
least two different creatures with the action, you can make one additional
|
||||||
|
attack with it against a third creature.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Distant Strike"
|
||||||
|
source = "Ranger (Horizon Walker)"
|
||||||
|
|
||||||
|
|
||||||
|
class SpectralDefense(Feature):
|
||||||
|
"""At 15th level, your ability to move between planes enables you to slip
|
||||||
|
through the planar boundaries to lessen the harm done to you during
|
||||||
|
battle. When you take damage from an attack, you can use your reaction to
|
||||||
|
give yourself resistance to all of that attack’s damage on this turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Spectral Defense"
|
||||||
|
source = "Ranger (Horizon Walker)"
|
||||||
|
|
||||||
|
|
||||||
|
# Monster Slayer
|
||||||
|
class MonsterSlayerMagic(Feature):
|
||||||
|
"""Starting at 3rd level, you learn an additional spell when you reach certain
|
||||||
|
levels in this class, as shown in the Monster Slayer Spells table. The
|
||||||
|
spell counts as a ranger spell for you, but it doesn't count against the
|
||||||
|
number of ranger spells you know
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Monster Slayer Magic"
|
||||||
|
source = "Ranger (Monster Slayer)"
|
||||||
|
_spells = {3: [spells.ProtectionFromEvilAndGood],
|
||||||
|
5: [spells.ZoneOfTruth],
|
||||||
|
9: [spells.MagicCircle],
|
||||||
|
13: [spells.Banishment],
|
||||||
|
17: [spells.HoldMonster]}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def spells_prepared(self):
|
||||||
|
level = self.owner.Ranger.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 HuntersSense(Feature):
|
||||||
|
"""At 3rd level, you gain the ability to peer at a creature and magically
|
||||||
|
discern how best to hurt it. As an action, choose one creature you can see
|
||||||
|
within 60 feet ofyou. You immediately learn whether the creature has any
|
||||||
|
damage immunities, resistances, or vulnerabilities and What they are. If
|
||||||
|
the creature is hidden from divination magic, you sense that it has no
|
||||||
|
damage immunities, re— sistances, or vulnerabilities. You can use this
|
||||||
|
feature a number of times equal to your Wisdom modifier (minimum of
|
||||||
|
once). You regain all expended uses of it when you finish a long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
_name = "Hunter's Sense"
|
||||||
|
source = "Ranger (Monster Slayer)"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
num = max(1, self.owner.wisdom.modifier)
|
||||||
|
return self._num + " ({:d}x/LR)".format(num)
|
||||||
|
|
||||||
|
|
||||||
|
class SlayersPrey(Feature):
|
||||||
|
"""Starting at 3rd level, you can focus your ire on one foe, increasing the
|
||||||
|
harm you inflict on it. As a bonus action, you designate one creature you
|
||||||
|
can see within 60 feet of you as the target of this feature. The first time
|
||||||
|
each turn that you hit that target with a weapon attack, it takes an extra
|
||||||
|
1d6 damage from the weapon. This benefit lasts until you finish a short or
|
||||||
|
long rest. It ends early if you designate a different creature
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Slayer's Prey"
|
||||||
|
source = "Ranger (Monster Slayer)"
|
||||||
|
|
||||||
|
|
||||||
|
class SupernaturalDefense(Feature):
|
||||||
|
"""At 7th level, you gain extra resilience against your prey’s assaults on
|
||||||
|
your mind and body. Whenever the target of your Slayer’s Prey forces you to
|
||||||
|
make a saving throw and whenever you make an ability check to escape that
|
||||||
|
targets grapple, add 1d6 to your roll
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Supernatural Defense"
|
||||||
|
source = "Ranger (Monster Slayer)"
|
||||||
|
|
||||||
|
|
||||||
|
class MagicUsersNemesis(Feature):
|
||||||
|
"""At 11th level, you gain the ability to thwart someone else’s magic. When
|
||||||
|
you see a creature casting a spell or teleporting within 60 feet of you,
|
||||||
|
you can use your reaction to try to magically foil it. The creature must
|
||||||
|
succeed on a Wisdom saving throw against your spell save DC, or its spell
|
||||||
|
or teleport fails and is wasted. Once you use this feature, you can’t use
|
||||||
|
it again until you finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Magic User's Nemesis"
|
||||||
|
source = "Ranger (Monster Slayer)"
|
||||||
|
|
||||||
|
|
||||||
|
class SlayersCounter(Feature):
|
||||||
|
"""At 15th level, you gain the ability to counterattack when your prey tries
|
||||||
|
to sabotage you. If the target of your Slayer’s Prey forces you to make a
|
||||||
|
saving throw, you can use your reaction to make one weapon attack against
|
||||||
|
the quarry. You make this attack immediately before making the saving
|
||||||
|
throw. If your attack hits, your save automatir cally succeeds, in addition
|
||||||
|
to the attack’s normal effects
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Slayer's Counter"
|
||||||
|
source = "Ranger (Monster Slayer)"
|
||||||
|
|
||||||
|
|
||||||
# Revised Ranger
|
# Revised Ranger
|
||||||
class FavoredEnemyRevised(Feature):
|
class FavoredEnemyRevised(Feature):
|
||||||
"""Beginning at 1st level, you have significant experience studying, tracking,
|
"""Beginning at 1st level, you have significant experience studying, tracking,
|
||||||
@@ -185,7 +822,7 @@ class FleetOfFoot(Feature):
|
|||||||
source = "Revised Ranger"
|
source = "Revised Ranger"
|
||||||
|
|
||||||
|
|
||||||
class HideInPlainSight(Feature):
|
class HideInPlainSightRevised(Feature):
|
||||||
"""Starting at 10th level, you can remain perfectly still for long periods of
|
"""Starting at 10th level, you can remain perfectly still for long periods of
|
||||||
time to set up ambushes.
|
time to set up ambushes.
|
||||||
|
|
||||||
@@ -204,41 +841,7 @@ class HideInPlainSight(Feature):
|
|||||||
source = "Revised Ranger"
|
source = "Revised Ranger"
|
||||||
|
|
||||||
|
|
||||||
class Vanish(Feature):
|
# Beast Conclave
|
||||||
"""Starting at 14th level, you can use the Hide action as a bonus action on
|
|
||||||
your turn. Also, you can’t be tracked by nonmagical means, unless you
|
|
||||||
choose to leave a trail
|
|
||||||
|
|
||||||
"""
|
|
||||||
name = "Vanish"
|
|
||||||
source = "Revised Ranger"
|
|
||||||
|
|
||||||
|
|
||||||
class FeralSenses(Feature):
|
|
||||||
"""At 18th level, you gain preternatural senses that help you fight creatures
|
|
||||||
you can’t see. When you attack a creature you can’t see, your inability to
|
|
||||||
see it doesn’t impose disadvantage on your attack rolls against it.
|
|
||||||
|
|
||||||
You are also aware of the location of any invisible creature within 30 feet
|
|
||||||
of you, provided that the creature isn’t hidden from you and you aren’t
|
|
||||||
blinded or deafened
|
|
||||||
|
|
||||||
"""
|
|
||||||
name = "Feral Senses"
|
|
||||||
source = "Revised Ranger"
|
|
||||||
|
|
||||||
|
|
||||||
class FoeSlayer(Feature):
|
|
||||||
"""At 20th level, you become an unparalleled hunter. Once on each of your
|
|
||||||
turns, you can add your Wisdom modifier to the attack roll or the damage
|
|
||||||
roll of an attack you make. You can choose to use this feature before or
|
|
||||||
after the roll, but before any effects of the roll are applied
|
|
||||||
|
|
||||||
"""
|
|
||||||
name = "Foe Slayer"
|
|
||||||
source = "Revised Ranger"
|
|
||||||
|
|
||||||
|
|
||||||
class AnimalCompanion(Feature):
|
class AnimalCompanion(Feature):
|
||||||
"""At 3rd level, you learn to use your magic to create a powerful bond with a
|
"""At 3rd level, you learn to use your magic to create a powerful bond with a
|
||||||
creature of the natural world.
|
creature of the natural world.
|
||||||
@@ -343,3 +946,59 @@ class SuperiorBeastsDefense(Feature):
|
|||||||
"""
|
"""
|
||||||
name = "Superior Beast's Defense"
|
name = "Superior Beast's Defense"
|
||||||
source = "Revised Ranger (Beast Conclave)"
|
source = "Revised Ranger (Beast Conclave)"
|
||||||
|
|
||||||
|
|
||||||
|
# Deep Stalker Conclave
|
||||||
|
class UnderdarkScout(Feature):
|
||||||
|
"""At 3rd level, you master the art of the ambush. On your first turn during
|
||||||
|
combat, you gain a +10 bonus to your speed, and if you use the Attack
|
||||||
|
action, you can make one additional attack. You are also adept at evading
|
||||||
|
creatures that rely on darkvision. Such creatures gain no benefit when
|
||||||
|
attempting to detect you in dark and dim conditions. Additionally, when the
|
||||||
|
DM determines if you can hide from a creature, that creature gains no
|
||||||
|
benefit from its darkvision
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Underdark Scout"
|
||||||
|
source = "Revised Ranger (Deep Stalker Conclave)"
|
||||||
|
|
||||||
|
|
||||||
|
class DeepStalkerMagic(Feature):
|
||||||
|
"""Starting at 3rd level, you learn an additional spell when you reach certain
|
||||||
|
levels in this class, as shown in the Deep Stalker Spells table. The spell
|
||||||
|
counts as a ranger spell for you, but it doesn't count against the number
|
||||||
|
of ranger spells you know
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Deep Stalker Magic"
|
||||||
|
source = "Revised Ranger (Deep Stalker Conclave)"
|
||||||
|
_spells = {3: [spells.DisguiseSelf],
|
||||||
|
5: [spells.RopeTrick],
|
||||||
|
9: [spells.GlyphOfWarding],
|
||||||
|
13: [spells.GreaterInvisibility],
|
||||||
|
17: [spells.Seeming]}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def spells_prepared(self):
|
||||||
|
level = self.owner.Ranger.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 StalkersDodge(Feature):
|
||||||
|
"""At 15th level, whenever a creature attacks you and does not have advantage,
|
||||||
|
you can use your reaction to impose disadvantage on the creature’s attack
|
||||||
|
roll against you. You can use this feature before or after the attack roll
|
||||||
|
is made, but it must be used before the outcome of the roll is determined
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Stalker's Dodge"
|
||||||
|
source = "Revised Ranger (Deep Stalker Conclave)"
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class UncannyDodge(Feature):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
name = "Uncanny Dodge"
|
name = "Uncanny Dodge"
|
||||||
source = "Rogue"
|
source = "Class (many)"
|
||||||
|
|
||||||
|
|
||||||
class Evasion(Feature):
|
class Evasion(Feature):
|
||||||
@@ -124,3 +124,447 @@ class StrokeOfLuck(Feature):
|
|||||||
"""
|
"""
|
||||||
name = "Stroke of Luck"
|
name = "Stroke of Luck"
|
||||||
source = "Rogue"
|
source = "Rogue"
|
||||||
|
|
||||||
|
|
||||||
|
# Thief
|
||||||
|
class FastHands(Feature):
|
||||||
|
"""Starting at 3rd level, you can use the bonus action granted by your Cunning
|
||||||
|
Action to make a Dexterity (Sleight of Hand) check, use your thieves’ tools
|
||||||
|
to disarm a trap or open a lock, or take the Use an Object action.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Fast Hands"
|
||||||
|
source = "Rogue (Thief)"
|
||||||
|
|
||||||
|
|
||||||
|
class SecondStoryWork(Feature):
|
||||||
|
"""When you choose this archetype at 3rd level, you gain the ability to climb
|
||||||
|
faster than normal; climbing no longer costs you extra movement. In
|
||||||
|
addition, when you make a running jump, the distance you cover increases by
|
||||||
|
a number of feet equal to your Dexterity modifier.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Second-Story Work"
|
||||||
|
source = "Rogue (Thief)"
|
||||||
|
|
||||||
|
|
||||||
|
class SupremeSneak(Feature):
|
||||||
|
"""Starting at 9th level, you have advantage on a Dexterity (Stealth) check if
|
||||||
|
you move no more than half your speed on the same turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Supreme Sneak"
|
||||||
|
source = "Rogue (Thief)"
|
||||||
|
|
||||||
|
|
||||||
|
class UseMagicDevice(Feature):
|
||||||
|
"""By 13th level, you have learned enough about the workings of magic that you
|
||||||
|
can improvise the use of items even when they are not intended for you. You
|
||||||
|
ignore all class, race, and level requirements on the use of magic items
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Use Magic Device"
|
||||||
|
source = "Rogue (Thief)"
|
||||||
|
|
||||||
|
|
||||||
|
class ThiefsReflexes(Feature):
|
||||||
|
"""When you reach 17th level, you have become adept at laying ambushes and
|
||||||
|
quickly escaping danger. You can take two turns during the first round of
|
||||||
|
any combat. You take your first turn at your normal initiative and your
|
||||||
|
second turn at your initiative minus 10. You can’t use this feature when
|
||||||
|
you are surprised.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Thief's Reflexes"
|
||||||
|
source = "Rogue (Thief)"
|
||||||
|
|
||||||
|
|
||||||
|
# Assassin
|
||||||
|
class Assassinate(Feature):
|
||||||
|
"""Starting at 3rd level, you are at your deadliest when you get the drop on
|
||||||
|
your enemies. You have advantage on attack rolls against any creature that
|
||||||
|
hasn’t taken a turn in the combat yet. In addition, any hit you score
|
||||||
|
against a creature that is surprised is a critical hit.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Assassinate"
|
||||||
|
source = "Rogue (Assassin)"
|
||||||
|
|
||||||
|
|
||||||
|
class InfiltrationExpertise(Feature):
|
||||||
|
"""Starting at 9th level, you can unfailingly create false identities for
|
||||||
|
yourself. You must spend seven days and 25 gp to establish the history,
|
||||||
|
profession, and affiliations for an identity. You can’t establish an
|
||||||
|
identity that belongs to someone else. For example, you might acquire
|
||||||
|
appropriate clothing, letters of introduction, and official- looking
|
||||||
|
certification to establish yourself as a member of a trading house from a
|
||||||
|
remote city so you can insinuate yourself into the company of other wealthy
|
||||||
|
merchants. Thereafter, if you adopt the new identity as a disguise, other
|
||||||
|
creatures believe you to be that person until given an obvious reason not
|
||||||
|
to.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Infiltration Expertise"
|
||||||
|
source = "Rogue (Assassin)"
|
||||||
|
|
||||||
|
|
||||||
|
class Imposter(Feature):
|
||||||
|
"""At 13th level, you gain the ability to unerringly mimic another person’s
|
||||||
|
speech, writing, and behavior. You must spend at least three hours studying
|
||||||
|
these three components of the person’s behavior, listening to speech,
|
||||||
|
examining handwriting, and observing mannerisms. Your ruse is indiscernible
|
||||||
|
to the casual observer. If a wary creature suspects something is amiss, you
|
||||||
|
have advantage on any Charisma (Deception) check you make to avoid
|
||||||
|
detection
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Imposter"
|
||||||
|
source = "Rogue (Assassin)"
|
||||||
|
|
||||||
|
|
||||||
|
class DeathStrike(Feature):
|
||||||
|
"""Starting at 17th level, you become a master of instant death. When you
|
||||||
|
attack and hit a creature that is surprised, it must make a Constitution
|
||||||
|
saving throw (DC 8 + your Dexterity modifier + your proficiency bonus). On
|
||||||
|
a failed save, double the damage of your attack against the creature
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Death Strike"
|
||||||
|
source = "Rogue (Assassin)"
|
||||||
|
|
||||||
|
|
||||||
|
# Arcane Trickster
|
||||||
|
class MageHandLegerdemain(Feature):
|
||||||
|
"""Starting at 3rd level, when you cast mage hand, you can make the spectral
|
||||||
|
hand invisible, and you can perform the following additional tasks with it:
|
||||||
|
|
||||||
|
-- You can stow one object the hand is holding in a container worn or
|
||||||
|
carried by another creature.
|
||||||
|
|
||||||
|
-- You can retrieve an object in a container worn or carried by another
|
||||||
|
creature.
|
||||||
|
|
||||||
|
--You can use thieves’ tools to pick locks and disarm traps at range
|
||||||
|
|
||||||
|
You can perform one of these tasks without being noticed by a creature if
|
||||||
|
you succeed on a Dexterity (Sleight of Hand) check contested by the
|
||||||
|
creature’s Wisdom (Perception) check. In addition, you can use the bonus
|
||||||
|
action granted by your Cunning Action to control the hand.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Mage Hand Legerdemain"
|
||||||
|
source = "Rogue (Arcane Trickster)"
|
||||||
|
|
||||||
|
|
||||||
|
class MagicalAmbush(Feature):
|
||||||
|
"""Starting at 9th level, if you are hidden from a creature when you cast a
|
||||||
|
spell on it, the creature has disadvantage on any saving throw it makes
|
||||||
|
against the spell this turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Magical Ambush"
|
||||||
|
source = "Rogue (Arcane Trickster)"
|
||||||
|
|
||||||
|
|
||||||
|
class VersatileTrickster(Feature):
|
||||||
|
"""At 13th level, you gain the ability to distract targets with your mage
|
||||||
|
hand. As a bonus action on your turn, you can designate a creature within 5
|
||||||
|
feet of the spectral hand created by the spell. Doing so gives you
|
||||||
|
advantage on attack rolls against that creature until the end of the turn.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Versatile Trickster"
|
||||||
|
source = "Rogue (Arcane Trickster)"
|
||||||
|
|
||||||
|
|
||||||
|
class SpellThief(Feature):
|
||||||
|
"""At 17th level, you gain the ability to magically steal the knowledge of how
|
||||||
|
to cast a spell from another spellcaster. Immediately after a creature
|
||||||
|
casts a spell that targets you or includes you in its area of effect, you
|
||||||
|
can use your reaction to force the creature to make a saving throw with its
|
||||||
|
spellcasting ability modifier. The DC equals your spell save DC.
|
||||||
|
|
||||||
|
On a failed save, you negate the spell’s effect against you, and you steal
|
||||||
|
the knowledge of the spell if it is at least 1st level and of a level you
|
||||||
|
can cast (it doesn’t need to be a wizard spell). For the next 8 hours, you
|
||||||
|
know the spell and can cast it using your spell slots. The creature can’t
|
||||||
|
cast that spell until the 8 hours have passed. Once you use this feature,
|
||||||
|
you can’t use it again until you finish a long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Spell Thief"
|
||||||
|
source = "Rogue (Arcane Trickster)"
|
||||||
|
|
||||||
|
|
||||||
|
# Inquisitive
|
||||||
|
class EarForDeceit(Feature):
|
||||||
|
"""When you choose this archetype at 3rd level, you de— velop a talent for
|
||||||
|
picking out lies. Whenever you make a Wisdom (Insight) check to determine
|
||||||
|
whether a creature is lying, treat a roll of 7 or lower on the c120 as an
|
||||||
|
8.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Ear for Deceit"
|
||||||
|
source = "Rogue (Inquisitive)"
|
||||||
|
|
||||||
|
|
||||||
|
class EyeForDetail(Feature):
|
||||||
|
"""Starting at 3rd level, you can use a bonus action to make a Wisdom
|
||||||
|
(Perception) check to spot a hidden creature or object or to make an
|
||||||
|
Intelligence (Investigation) check to uncover or decipher clues
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Eye for Detail"
|
||||||
|
source = "Rogue (Inquisitive)"
|
||||||
|
|
||||||
|
|
||||||
|
class InsightfulFighting(Feature):
|
||||||
|
"""At 3rd level, you gain the ability to decipher an opponent's tactics and
|
||||||
|
develop a counter to them. As a bonus action, you can make a Wisdom
|
||||||
|
(Insight) check against a creature you can see that isn’t incapacitated,
|
||||||
|
contested by the target’s Charisma (Deception) check. If you suc— ceed, you
|
||||||
|
can use your Sneak Attack against that target even ifyou don’t have
|
||||||
|
advantage on the attack roll, but not if you have disadvantage on it. This
|
||||||
|
benefit lasts for 1 minute or until you successfully use this feature
|
||||||
|
against a different target
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Insightful Fighting"
|
||||||
|
source = "Rogue (Inquisitive)"
|
||||||
|
|
||||||
|
|
||||||
|
class SteadyEye(Feature):
|
||||||
|
"""Starting at 9th level, you have advantage on any Wisdom (Perception) or
|
||||||
|
Intelligence (Investigation) check if you move no more than half your speed
|
||||||
|
on the same turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Steady Eye"
|
||||||
|
source = "Rogue (Inquisitive)"
|
||||||
|
|
||||||
|
|
||||||
|
class UnerringEye(Feature):
|
||||||
|
"""Beginning at 13th level, your senses are almost im« possible to foil. As an
|
||||||
|
action, you sense the presence of illusions, shapechangers not in their
|
||||||
|
original form, and other magic designed to deceive the senses within 30
|
||||||
|
feet ofyou, provided you aren’t blinded or deafened. You sense that an
|
||||||
|
effect is attempting to trick you, but you gain no insight into what is
|
||||||
|
hidden or into its true nature. 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 = "Unerring Eye"
|
||||||
|
source = "Rogue (Inquisitive)"
|
||||||
|
|
||||||
|
|
||||||
|
class EyeForWeakness(Feature):
|
||||||
|
"""At 17th level, you learn to exploit a creature’s weak— nesses by carefully
|
||||||
|
studying its tactics and movement. While your Insightful Fighting feature
|
||||||
|
applies to a creature, your Sneak Attack damage against that creature
|
||||||
|
increases by 3d6
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Eye for Weakness"
|
||||||
|
source = "Rogue (Inquisitive)"
|
||||||
|
|
||||||
|
|
||||||
|
# Mastermind
|
||||||
|
class MasterOfIntrigue(Feature):
|
||||||
|
"""When you choose this archetype at 3rd level, you gain proficiency with the
|
||||||
|
disguise kit, the forgery kit, and one gaming set Of your choice. You also
|
||||||
|
learn two languages of your choice. Additionally, you can unerringly mimic
|
||||||
|
the speech patterns and accent of a creature that you hear speak for at
|
||||||
|
least 1 minute, enabling you to pass yourself off as a native speaker of a
|
||||||
|
particular land, provided that you know the language.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Master of Intrigue"
|
||||||
|
source = "Rogue (Mastermind)"
|
||||||
|
|
||||||
|
|
||||||
|
class MasterOfTactics(Feature):
|
||||||
|
"""Starting at 3rd level, you can use the Help action as a bonus
|
||||||
|
action. Additionally, when you use the Help action to aid an ally in
|
||||||
|
attacking a creature, the target of that attack can be within 30 feet of
|
||||||
|
you, rather than within 5 feet of you, if the target can see or hear you
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Master of Tactics"
|
||||||
|
source = "Rogue (Mastermind)"
|
||||||
|
|
||||||
|
|
||||||
|
class InsightfulManipulator(Feature):
|
||||||
|
"""Starting at 9th level, if you spend at least 1 minute observing or
|
||||||
|
interacting with another creature outside combat, you can learn certain
|
||||||
|
information about its ca— pabilities compared to your own. The DM tells you
|
||||||
|
if the creature is your equal, superior, or inferior in regard to two of
|
||||||
|
the following characteristics of your choice:
|
||||||
|
|
||||||
|
-- Intelligence score
|
||||||
|
|
||||||
|
-- Wisdom score
|
||||||
|
|
||||||
|
-- Charisma score
|
||||||
|
|
||||||
|
--Class levels (if any)
|
||||||
|
|
||||||
|
At the DM’s option, you might also realize you know a piece of the
|
||||||
|
creature’s history or one of its personality traits, if it has any
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Insightful Manipulator"
|
||||||
|
source = "Rogue (Mastermind)"
|
||||||
|
|
||||||
|
|
||||||
|
class Misdirection(Feature):
|
||||||
|
"""Beginning at 13th level, you can sometimes cause another creature to
|
||||||
|
suffer an attack meant for you. When you are targeted by an attack while a
|
||||||
|
creature within 5 feet of you is granting you cover against that attack,
|
||||||
|
you can use your reaction to have the attack target that crea— ture instead
|
||||||
|
of you
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Misdirection"
|
||||||
|
source = "Rogue (Mastermind)"
|
||||||
|
|
||||||
|
|
||||||
|
class SoulOfDeceit(Feature):
|
||||||
|
"""Starting at 17th level, your thoughts can’t be read by telepathy or other
|
||||||
|
means, unless you allow it. You can present false thoughts by succeeding on
|
||||||
|
a Charisma (Deception) check contested by the mind reader’s Wis— dom
|
||||||
|
(Insight) check. Additionally, no matter what you say, magic that would
|
||||||
|
determine if you are telling the truth indicates you are being truthful if
|
||||||
|
you so choose, and you can’t be compelled to tell the truth by magic
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Soul of Deceit"
|
||||||
|
source = "Rogue (Masterind)"
|
||||||
|
|
||||||
|
|
||||||
|
# Scout
|
||||||
|
class Skirmisher(Feature):
|
||||||
|
"""Starting at 3rd level, you are difficult to pin down during a fight. You
|
||||||
|
can move up to halfyour speed as a reaction when an enemy ends its turn
|
||||||
|
within 5 feet of you. This movement doesn’t provoke opportunity attacks
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Skirmisher"
|
||||||
|
source = "Rogue (Scout)"
|
||||||
|
|
||||||
|
|
||||||
|
class Survivalist(Feature):
|
||||||
|
"""When you choose this archetype at 3rd level, you gain proficiency in the
|
||||||
|
Nature and Survival skills if you don’t already have it. Your proficiency
|
||||||
|
bonus is doubled for any ability check you make that uses either of those
|
||||||
|
pro— ficiencies
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, owner=None):
|
||||||
|
super().__init__(owner=owner)
|
||||||
|
self.owner.skill_expertise += ("nature", "survival")
|
||||||
|
|
||||||
|
|
||||||
|
class SuperiorMobility(Feature):
|
||||||
|
"""At 9th level, your walking speed increases by 10 feet. If you have a
|
||||||
|
climbing or swimming speed, this increase applies to that speed as well.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Superior Mobility"
|
||||||
|
source = "Rogue (Scout)"
|
||||||
|
needs_implementation = True # apply to climbing and swimming
|
||||||
|
|
||||||
|
|
||||||
|
class AmbushMaster(Feature):
|
||||||
|
"""Starting at 13th level, you excel at leading ambushes and acting first in a
|
||||||
|
fight. You have advantage on initiative rolls. In addition, the first
|
||||||
|
creature you hit during the first round of a combat becomes easier for you
|
||||||
|
and others to strike; attack rolls against that target have advantage until
|
||||||
|
the start ofyour next turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Ambush Master"
|
||||||
|
source = "Rogue (Scout)"
|
||||||
|
|
||||||
|
|
||||||
|
class SuddenStrike(Feature):
|
||||||
|
"""Starting at 17th level, you can strike with deadly speed. If you take the
|
||||||
|
Attack action on your turn, you can make one additional attack as a bonus
|
||||||
|
action. This attack can benefit from your Sneak Attack even if you have
|
||||||
|
already used it this turn, but you can’t use your Sneak Attack against the
|
||||||
|
same target more than once in a turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Sudden Strike"
|
||||||
|
source = "Rogue (Scout)"
|
||||||
|
|
||||||
|
|
||||||
|
# Swashbuckler
|
||||||
|
class FancyFootwork(Feature):
|
||||||
|
"""When you choose this archetype at 3rd level, you learn how to land a strike
|
||||||
|
and then slip away without reprisal. During your turn, if you make a melee
|
||||||
|
attack against a creature, that creature can’t make opportunity attacks
|
||||||
|
against you for the rest ofyour turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Fancy Footwork"
|
||||||
|
source = "Rogue (Swashbuckler)"
|
||||||
|
|
||||||
|
|
||||||
|
class RakishAudacity(Feature):
|
||||||
|
"""Starting at 3rd level, your confidence propels you into battle. You can give
|
||||||
|
yourself a bonus to your initiative rolls equal to your Charisma
|
||||||
|
modifier. You also gain an additional way to use your Sneak Attack; you
|
||||||
|
don’t need advantage on the attack roll to use your Sneak Attack against a
|
||||||
|
creature if you are within 5 feet of it, no other creatures are within 5
|
||||||
|
feet of you, and you don’t have disadvantage on the attack roll. All the
|
||||||
|
other rules for Sneak Attack still apply to you.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Rakish Audacity"
|
||||||
|
source = "Rogue (Swashbuckler)"
|
||||||
|
|
||||||
|
|
||||||
|
class Panache(Feature):
|
||||||
|
"""At 9th level, your charm becomes extraordinarily be— guiling. As an action,
|
||||||
|
you can make a Charisma (Persuasion) check contested by a creature’s
|
||||||
|
Wisdom (Insight) check. The creature must be able to hear you, and the
|
||||||
|
two ofyou must share a language. If you succeed on the check and the
|
||||||
|
creature is hostile to you, it has disadvantage on attack rolls against
|
||||||
|
targets other than you and can’t make opportunity attacks against targets
|
||||||
|
other than you.
|
||||||
|
|
||||||
|
This effect lasts for 1 minute, until one of your companions attacks the
|
||||||
|
target or affects it with a spell, or until you and the target are more
|
||||||
|
than 60 feet apart. If you succeed on the check and the creature isn’t
|
||||||
|
hostile to you, it is charmed by you for 1 minute. While charmed, it
|
||||||
|
regards you as a friendly acquaintance. This effect ends immediately if you
|
||||||
|
or your companions do anything harmful to it
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Panache"
|
||||||
|
source = "Rogue (Swashbuckler)"
|
||||||
|
|
||||||
|
|
||||||
|
class ElegantManeuver(Feature):
|
||||||
|
"""Starting at 13th level, you can use a bonus action on your turn to gain
|
||||||
|
advantage on the next Dexterity (Ac— robatics) or Strength (Athletics)
|
||||||
|
check you make during the same turn
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Elegant Maneuver"
|
||||||
|
source = "Rogue (Swashbuckler)"
|
||||||
|
|
||||||
|
|
||||||
|
class MasterDuelist(Feature):
|
||||||
|
"""Beginning at 17th level, your mastery of the blade lets you turn failure
|
||||||
|
into success in combat. Ifyou miss with an attack roll, you can roll it
|
||||||
|
again with advantage. Once you do so, you can’t use this feature again
|
||||||
|
until you finish a short or long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Master Duelist"
|
||||||
|
source = "Rogue (Swashbuckler)"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from .features import Feature
|
from .features import Feature
|
||||||
|
from .. import spells
|
||||||
|
|
||||||
|
|
||||||
# PHB
|
# PHB
|
||||||
@@ -208,3 +209,312 @@ class DraconicResilience(Feature):
|
|||||||
"""
|
"""
|
||||||
name = "Draconic Resilience"
|
name = "Draconic Resilience"
|
||||||
source = "Sorceror (Draconic Bloodline)"
|
source = "Sorceror (Draconic Bloodline)"
|
||||||
|
|
||||||
|
|
||||||
|
class DragonAncestor(Feature):
|
||||||
|
"""At 1st level, you choose one type of dragon as your ancestor. The damage
|
||||||
|
type associated with each dragon is used by features you gain later
|
||||||
|
|
||||||
|
Dragon : Damage
|
||||||
|
|
||||||
|
Black : Acid
|
||||||
|
|
||||||
|
Blue : Lightning
|
||||||
|
|
||||||
|
Brass : Fire
|
||||||
|
|
||||||
|
Bronze : Lightning
|
||||||
|
|
||||||
|
Copper : Acid
|
||||||
|
|
||||||
|
Gold : Fire
|
||||||
|
|
||||||
|
Green : Poison
|
||||||
|
|
||||||
|
Red : Fire
|
||||||
|
|
||||||
|
Silver : Cold
|
||||||
|
|
||||||
|
White : Cold
|
||||||
|
|
||||||
|
You can speak, read, and write Draconic. Additionally, whenever you make a
|
||||||
|
Charisma check when interacting with dragons, your proficiency bonus is
|
||||||
|
doubled if it applies to the check.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Dragon Ancestor"
|
||||||
|
source = "Sorceror (Draconic Bloodline)"
|
||||||
|
|
||||||
|
|
||||||
|
class ElementalAffinity(Feature):
|
||||||
|
"""Starting at 6th level, when you cast a spell that deals damage of the type
|
||||||
|
associated with your draconic ancestry, add your Charisma modifier to that
|
||||||
|
damage. At the same time, you can spend 1 sorcery point to gain resistance
|
||||||
|
to that damage type for 1 hour
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Elemental Affinity"
|
||||||
|
source = "Sorceror (Draconic Bloodline)"
|
||||||
|
|
||||||
|
|
||||||
|
class DragonWings(Feature):
|
||||||
|
"""At 14th level, you gain the ability to sprout a pair of dragon wings from
|
||||||
|
your back, gaining a flying speed equal to your current speed. You can
|
||||||
|
create these wings as a bonus action on your turn. They last until you
|
||||||
|
dismiss them as a bonus action on your turn. You can’t manifest your wings
|
||||||
|
while wearing armor unless the armor is made to accommodate them, and
|
||||||
|
clothing not made to accommodate your wings might be destroyed when you
|
||||||
|
manifest them
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Dragon Wings"
|
||||||
|
source = "Sorceror (Draconic Bloodline)"
|
||||||
|
|
||||||
|
|
||||||
|
class DraconicPresence(Feature):
|
||||||
|
"""Beginning at 18th level, you can channel the dread presence of your dragon
|
||||||
|
ancestor, causing those around you to become awestruck or frightened. As an
|
||||||
|
action, you can spend 5 sorcery points to draw on this power and exude an
|
||||||
|
aura of awe or fear (your choice) to a distance of 60 feet. For 1 minute or
|
||||||
|
until you lose your concentration (as if you were casting a concentration
|
||||||
|
spell), each hostile creature that starts its turn in this aura must
|
||||||
|
succeed on a Wisdom saving throw or be charmed (if you chose awe) or
|
||||||
|
frightened (if you chose fear) until the aura ends. A creature that
|
||||||
|
succeeds on this saving throw is immune to your aura for 24 hours.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Draconic Presence"
|
||||||
|
source = "Sorceror (Draconic Bloodline)"
|
||||||
|
|
||||||
|
|
||||||
|
# Divine Soul
|
||||||
|
class DivineMagic(Feature):
|
||||||
|
"""Your link to the divine allows you to learn spells from the cleric
|
||||||
|
class. When your Spellcasting feature lets you learn or replace a sorcerer
|
||||||
|
cantrip or a sorcerer spell of 1st level or higher, you can choose the new
|
||||||
|
spell from the cleric spell list or the sorcerer spell list. You must
|
||||||
|
otherwise obey all the restrictions for selecting the spell, and it becomes
|
||||||
|
a sorcerer spell for you.
|
||||||
|
|
||||||
|
In addition, choose an affinity for the source of your divine power: good,
|
||||||
|
evil, law, chaos, or neutrality. You learn an additional spell based on
|
||||||
|
that affinity, as shown below. It is a sorcerer spell for you, but it
|
||||||
|
doesn’t count against your number of sorcerer spells known. If you later
|
||||||
|
replace this spell, you must replace it with a Spell from the cleric spell
|
||||||
|
list
|
||||||
|
|
||||||
|
Good : Cure Wounds
|
||||||
|
|
||||||
|
Evil : Inflict Wounds
|
||||||
|
|
||||||
|
Law : Bless
|
||||||
|
|
||||||
|
Chaos : Bane
|
||||||
|
|
||||||
|
Neutrality : Protection from Evil and Good
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Divine Magic"
|
||||||
|
source = "Sorceror (Divine Soul)"
|
||||||
|
|
||||||
|
|
||||||
|
class FavoredByTheGods(Feature):
|
||||||
|
"""Starting at 1st level, divine power guards your destiny. If you fail a
|
||||||
|
saving throw or miss with an attack roll, you can roll 2d4 and add it to
|
||||||
|
the total, possibly changing
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Favored by the Gods"
|
||||||
|
source = "Sorceror (Divine Soul)"
|
||||||
|
|
||||||
|
|
||||||
|
class EmpoweredHealing(Feature):
|
||||||
|
"""Starting at 6th level, the divine energy coursing through you can empower
|
||||||
|
healing spells. Whenever you or an ally within 5 feet of you rolls dice to
|
||||||
|
determine the number of hit points a spell restores, you can spend 1
|
||||||
|
sorcery point to reroll any number of those dice once, provided you aren't
|
||||||
|
incapacitated. You can use this feature only once per turn.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Empowered Healing"
|
||||||
|
source = "Sorceror (Divine Soul)"
|
||||||
|
|
||||||
|
|
||||||
|
class OtherworldlyWings(Feature):
|
||||||
|
"""Starting at 14th level, you can use a bonus action to manifest a pair of
|
||||||
|
spectral wings from your back. While the wings are present, you have a
|
||||||
|
flying speed of 30 feet. The wings last until you're incapacitated, you
|
||||||
|
die, or you dismiss them as a bonus action. The affinity you chose for your
|
||||||
|
Divine Magic feature determines the appearance of the spectral wings: eagle
|
||||||
|
wings for good or law, bat wings for evil or chaos, and dragonfly wings for
|
||||||
|
neutrality
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Otherworldly Wings"
|
||||||
|
source = "Sorceror (Divine Soul)"
|
||||||
|
|
||||||
|
|
||||||
|
class UnearthlyRecovery(Feature):
|
||||||
|
"""At 18th level, you gain the ability to overcome grievous injuries. As a
|
||||||
|
bonus action when you have fewer than half of your hit points remaining,
|
||||||
|
you can regain a number of hit points equal to half your hit point
|
||||||
|
maximum. Once you use this feature, you can’t use it again until you finish
|
||||||
|
a long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Unearthly Recovery"
|
||||||
|
source = "Sorceror (Divine Soul)"
|
||||||
|
|
||||||
|
|
||||||
|
class EyesOfTheDark(Feature):
|
||||||
|
"""Starting at lst level, you have darkvision with a range of 120 feet. When
|
||||||
|
you reach 3rd level in this class, you learn the darkness spell, which
|
||||||
|
doesn’t count against your number of sorcerer spells known. In addition,
|
||||||
|
you can cast it by spending 2 sorcery points or by expending a spell
|
||||||
|
slot. If you cast it with sorcery points, you can see through the darkness
|
||||||
|
created by the spell.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Eyes of the Dark"
|
||||||
|
source = "Sorceror (Shadow Magic)"
|
||||||
|
spells_known = (spells.Darkness,)
|
||||||
|
spells_prepared = (spells.Darkness,)
|
||||||
|
|
||||||
|
|
||||||
|
class StrengthOfTheGrave(Feature):
|
||||||
|
"""Starting at lst level, your existence in a twilight state between life
|
||||||
|
and death makes you difficult to defeat. When damage reduces you to 0 hit
|
||||||
|
points, you can make a Charisma saving throw (DC 5 + the damage taken). On
|
||||||
|
a success, you instead drop to 1 hit point. You can’t use this feature if
|
||||||
|
you are reduced to 0 hit points by radiant damage or by a critical
|
||||||
|
hit. After the saving throw succeeds, you can’t use this feature again
|
||||||
|
until you finish a long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Strength of the Grave"
|
||||||
|
source = "Sorceror (Shadow Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class HoundOfIllOmen(Feature):
|
||||||
|
"""At 6th level, you gain the ability to call forth a howling creature of
|
||||||
|
darkness to harass your foes. As a bonus action, you can spend 3 sorcery
|
||||||
|
points to magically summon a hound of ill omen to target one creature you
|
||||||
|
can see within 120 feet of you. The hound uses the dire wolf’s statistics
|
||||||
|
(see the Monster Manual or appendix C in the Player’s Handbook), with the
|
||||||
|
following changes:
|
||||||
|
|
||||||
|
-- The hound is size Medium, not Large, and it counts as a monstrosity, not
|
||||||
|
a beast.
|
||||||
|
|
||||||
|
-- It appears with a number of temporary hit points equal to half your
|
||||||
|
sorcerer level.
|
||||||
|
|
||||||
|
-- It can move through other creatures and objects as if they were
|
||||||
|
difficult terrain. The bound takes 5 force damage if it ends its turn
|
||||||
|
inside an object.
|
||||||
|
|
||||||
|
-- At the start of its turn, the hound automatically knows its target's
|
||||||
|
location. If the target was hidden, it is no longer hidden from the hound.
|
||||||
|
|
||||||
|
The hound appears in an unoccupied space of your choice within 30 feet of
|
||||||
|
the target. Roll initiative for the hound. On its turn, it can move only
|
||||||
|
toward its target by the most direct route, and it can use its action only
|
||||||
|
to attack its target. The hound can make opportunity attacks but only
|
||||||
|
against its target. Additionally, while the hound is within 5 feet of the
|
||||||
|
target, the target has disadvantage on saving throws against any spell you
|
||||||
|
cast. The hound disappears if it is reduced to 0 hit points, if its target
|
||||||
|
is reduced to 0 hit points, or after 5 minutes.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Hound of Ill Omen"
|
||||||
|
source = "Sorceror (Shadow Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class ShadowWalk(Feature):
|
||||||
|
"""At 14th 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 magically teleport up to 120 feet to an unoccupied space you can see
|
||||||
|
that is also in dim light or darkness
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Shadow Walk"
|
||||||
|
source = "Sorceror (Shadow Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class UmbralForm(Feature):
|
||||||
|
"""Starting at 18th level, you can spend 6 sorcery points as a bonus action to
|
||||||
|
magically transform yourself into a shadowy form. In this form, you have
|
||||||
|
resistance to all damage except force and radiant damage, and you can move
|
||||||
|
through other creatures and objects as if they were difficult terrain. You
|
||||||
|
take 5 force damage if you end your turn inside an object. You remain in
|
||||||
|
this form for 1 minute. It ends early if you are incapacitated, if you die,
|
||||||
|
or if you dismiss it as a bonus action.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Umbral Form"
|
||||||
|
source = "Sorceror (Shadow Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
# Storm Sorcery
|
||||||
|
class TempestuousMagic(Feature):
|
||||||
|
"""Starting at 1st level, you can use a bonus action on your turn to cause
|
||||||
|
whirling gusts of elemental air to briefly surround you, immediately before
|
||||||
|
or after you cast a spell of 1st level or higher. Doing so allows you to
|
||||||
|
fly up to 10 feet without provoking opportunity attacks
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Tempestuous Magic"
|
||||||
|
source = "Sorceror (Storm Sorcery)"
|
||||||
|
|
||||||
|
|
||||||
|
class HeartOfTheStorm(Feature):
|
||||||
|
"""At 6th level, you gain resistance to lightning and thunder damage. In
|
||||||
|
addition, whenever you start casting a spell of 1st level or higher that
|
||||||
|
deals lightning or thunder damage, stormy magic erupts from you. This
|
||||||
|
eruption causes creatures ofyour choice that you can see within 10 feet of
|
||||||
|
you to take lightning or thunder damage (choose each time this ability
|
||||||
|
activates) equal to half your sorcerer level.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Heart of the Storm"
|
||||||
|
source = "Sorceror (Storm Sorcery)"
|
||||||
|
|
||||||
|
|
||||||
|
class StormGuide(Feature):
|
||||||
|
"""At 6th level, you gain the ability to subtly control the weather around
|
||||||
|
you. Ifit is raining, you can use an action to cause the rain to stop
|
||||||
|
falling in a 20-foot—radius sphere centered on you. You can end this effect
|
||||||
|
as a bonus action. If it is windy, you can use a bonus action each round to
|
||||||
|
choose the direction that the wind blows in a IOO-foot-radius sphere
|
||||||
|
centered on you. The wind blows in that direction until the end ofyour next
|
||||||
|
turn. This feature doesn't alter the speed of the wind.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Storm Guide"
|
||||||
|
source = "Sorceror (Storm Sorcery)"
|
||||||
|
|
||||||
|
|
||||||
|
class StormsFury(Feature):
|
||||||
|
"""Starting at 14th level, when you are hit by a melee attack, you can use
|
||||||
|
your reaction to deal lightning damage to the attacker. The damage equals
|
||||||
|
your sorcerer level. The attacker must also make a Strength saving throw
|
||||||
|
against your sorcerer spell save DC. On a failed save, the attacker is
|
||||||
|
pushed in a straight line up to 20 feet away from you.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Storm's Fury"
|
||||||
|
source = "Sorceror (Storm Sorcery)"
|
||||||
|
|
||||||
|
|
||||||
|
class WindSoul(Feature):
|
||||||
|
"""At 18th level, you gain immunity to lightning and thunder damage. You also
|
||||||
|
gain a magical flying speed of 60 feet. As an action. you can reduce your
|
||||||
|
flying speed to 30 feet for 1 hour and choose a number of creatures within
|
||||||
|
30 feet ofyou equal to 3 + your Charisma modifier. The chosen creatures
|
||||||
|
gain a magical flying speed of 30 feet for 1 hour. Once you reduce your
|
||||||
|
flying speed in this way, you can’t do so again until you finish a short or
|
||||||
|
long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Wind Soul"
|
||||||
|
source = "Sorceror (Storm Sorcery)"
|
||||||
|
|||||||
@@ -129,6 +129,67 @@ class EldritchMaster(Feature):
|
|||||||
name = "Eldritch Master"
|
name = "Eldritch Master"
|
||||||
source = "Warlock"
|
source = "Warlock"
|
||||||
|
|
||||||
|
|
||||||
|
# The Archfey
|
||||||
|
class FeyPresence(Feature):
|
||||||
|
"""Starting at 1st level, your patron bestows upon you the ability to project
|
||||||
|
the beguiling and fearsome presence of the fey. As an action, you can cause
|
||||||
|
each creature in a 10-foot cube originating from you to make a Wisdom
|
||||||
|
saving throw against your warlock spell save DC.
|
||||||
|
|
||||||
|
The creatures that fail their saving throws are all charmed or frightened
|
||||||
|
by you (your choice) until the end of your next turn. Once you use this
|
||||||
|
feature, you can’t use it again until you finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Fey Presence"
|
||||||
|
source = "Warlock (Archfey Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class MistyEscape(Feature):
|
||||||
|
"""Starting at 6th level, you can vanish in a puff of mist in response to
|
||||||
|
harm. When you take damage, you can use your reaction to turn invisible and
|
||||||
|
teleport up to 60 feet to an unoccupied space you can see. You remain
|
||||||
|
invisible until the start of your next turn or until you attack or cast a
|
||||||
|
spell. Once you use this feature, you can't use it again until you finish a
|
||||||
|
short or long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Misty Escape"
|
||||||
|
source = "Warlock (Archfey Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class BeguilingDefenses(Feature):
|
||||||
|
"""Beginning at 10th level, your patron teaches you how to turn the
|
||||||
|
mind-affecting magic of your enemies against them. You are immune to being
|
||||||
|
charmed, and when another creature attempts to charm you, you can use your
|
||||||
|
reaction to attempt to turn the charm back on that creature. The creature
|
||||||
|
must succeed on a Wisdom saving throw against your warlock spell save DC or
|
||||||
|
be charmed by you for 1 minute or until the creature takes any damage.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Beguiling Defenses"
|
||||||
|
source = "Warlock (Archfey Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class DarkDelirium(Feature):
|
||||||
|
"""Starting at 14th level, you can plunge a creature into an illusory
|
||||||
|
realm. As an action, choose a creature that you can see within 60 feet of
|
||||||
|
you. It must make a Wisdom saving throw against your warlock spell save
|
||||||
|
DC. On a failed save, it is charmed or frightened by you (your choice) for
|
||||||
|
1 minute or until your concentration is broken (as if you are concentrating
|
||||||
|
on a spell).
|
||||||
|
|
||||||
|
This effect ends early if the creature takes any damage. Until this
|
||||||
|
illusion ends, the creature thinks it is lost in a misty realm, the
|
||||||
|
appearance of which you choose. The creature can see and hear only itself,
|
||||||
|
you, and the illusion. You must finish a short or long rest before you can
|
||||||
|
use this feature again.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Dark Delirium"
|
||||||
|
source = "Warlock (Archfey Patron)"
|
||||||
|
|
||||||
|
|
||||||
# The Fiend Patron
|
# The Fiend Patron
|
||||||
class DarkOnesBlessing(Feature):
|
class DarkOnesBlessing(Feature):
|
||||||
@@ -189,6 +250,176 @@ class HurlThroughHell(Feature):
|
|||||||
source = "Warlock (The Fiend Patron)"
|
source = "Warlock (The Fiend Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
# Great Old One
|
||||||
|
class AwakenedMind(Feature):
|
||||||
|
"""Starting at 1st level, your alien knowledge gives you the ability to touch
|
||||||
|
the minds of other creatures. You can communicate telepathically with any
|
||||||
|
creature you can see within 30 feet of you. You don’t need to share a
|
||||||
|
language with the creature for it to understand your telepathic utterances,
|
||||||
|
but the creature must be able to understand at least one language
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Awakened Mind"
|
||||||
|
source = "Warlock (Great Old One Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class EntropicWard(Feature):
|
||||||
|
"""At 6th level, you learn to magically ward yourself against attack and to
|
||||||
|
turn an enemy’s failed strike into good luck for yourself. When a creature
|
||||||
|
makes an attack roll against you, you can use your reaction to impose
|
||||||
|
disadvantage on that roll. If the attack misses you, your next attack roll
|
||||||
|
against the creature has advantage if you make it before the end of your
|
||||||
|
next turn. Once you use this feature, you can’t use it again until you
|
||||||
|
finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Entropic Ward"
|
||||||
|
source = "Warlock (Great Old One Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class ThoughtShield(Feature):
|
||||||
|
"""Starting at 10th level, your thoughts can’t be read by telepathy or other
|
||||||
|
means unless you allow it. You also have resistance to psychic damage, and
|
||||||
|
whenever a creature deals psychic damage to you, that creature takes the
|
||||||
|
same amount of damage that you do
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Thought Shield"
|
||||||
|
source = "Warlock (Great Old One Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class CreateThrall(Feature):
|
||||||
|
"""At 14th level, you gain the ability to infect a humanoid’s mind with the
|
||||||
|
alien magic of your patron. You can use your action to touch an
|
||||||
|
incapacitated humanoid. That creature is then charmed by you until a remove
|
||||||
|
curse spell is cast on it, the charmed condition is removed from it, or you
|
||||||
|
use this feature again. You can communicate telepathically with the charmed
|
||||||
|
creature as long as the two of you are on the same plane of existence
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Create Thrall"
|
||||||
|
source = "Warlock (Great Old One Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
# Undying Patron
|
||||||
|
class AmongTheDead(Feature):
|
||||||
|
"""Starting at 1st level, you learn the spare the dying cantrip, which counts
|
||||||
|
as a warlock cantrip for you. You also have advantage on saving throws
|
||||||
|
against any disease. Additionally, undead have difficulty harming you. If
|
||||||
|
an undead targets you directly with an attack or a harmful spell, that
|
||||||
|
creature must make a Wisdom saving throw against your spell save DC (an
|
||||||
|
undead needn't make the save when it includes you in an area effect, such
|
||||||
|
as the explosion of fireball). On a failed save, the creature must choose a
|
||||||
|
new target or forfeit targeting someone instead of you, potentially wasting
|
||||||
|
the attack or spell. On a successful save, the creature is immune to this
|
||||||
|
effect for 24 hours. An undead is also immune to this effect for 24 hours
|
||||||
|
if you target it with an attack or a harmful spell.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Among the Dead"
|
||||||
|
source = "Warlock (The Undying Patron)"
|
||||||
|
spells_known = spells_prepared = (spells.SpareTheDying,)
|
||||||
|
|
||||||
|
|
||||||
|
class DefyDeath(Feature):
|
||||||
|
"""Starting at 6th level, you can give yourself vitality when you cheat death
|
||||||
|
or when you help someone else cheat it. You can regain hit points equal to
|
||||||
|
ld8 +your Constitution modifier (minimum of 1 hit point) when you succeed
|
||||||
|
on a death saving throw or when you stabilize a creature with spare the
|
||||||
|
dying. Once you use this feature, you can't use it again until you finish a
|
||||||
|
long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Defy Death"
|
||||||
|
source = "Warlock (The Undying Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class UndyingNature(Feature):
|
||||||
|
"""Beginning at 10th level , you can hold your breath indefinitely, and you
|
||||||
|
don't require food, water, or sleep, although you still require rest to
|
||||||
|
reduce exhaustion and still benefit from finishing short and long rests. In
|
||||||
|
addition, you age at a slower rate. For every 10 years that pass, your body
|
||||||
|
ages only 1 year, and you are immune to being magically aged
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Undying Nature"
|
||||||
|
source = "Warlock (The Undying Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class IndestructibleLife(Feature):
|
||||||
|
"""When you reach 14th level, you partake of some of the true secrets of the
|
||||||
|
Undying. On your turn, you can use a bonus action to regain hit points
|
||||||
|
equal to 1d8+your warlock level. Additionally, if you put a severed body
|
||||||
|
part of yours back in place when you use this feature, the part
|
||||||
|
reattaches. Once you use this feature, you can't use it again until you
|
||||||
|
finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Indestructible Life"
|
||||||
|
source = "Warlock (The Undying Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
# The Celestial
|
||||||
|
class HealingLight(Feature):
|
||||||
|
"""At lst level, you gain the ability to channel celestial energy to heal
|
||||||
|
wounds. You have a pool of d6s that you spend to fuel this healing. The
|
||||||
|
number of dice in the pool equals 1 + your warlock level. As a bonus
|
||||||
|
action, you can heal one creature you can see within 60 feet of you,
|
||||||
|
spending dice from the pool. The maximum number of dice you can spend at
|
||||||
|
once equals your Charisma modifier (minimum of one die). Roll the
|
||||||
|
dice you spend, add them together, and restore a number of hit points equal
|
||||||
|
to the total. Your pool regains all expended dice when you finish a long
|
||||||
|
rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
_name = "Healing Light"
|
||||||
|
source = "Warlock (The Celestial Patron)"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
num = 1 + self.owner.Warlock.level
|
||||||
|
return self._name + " ({:d}d6/LR)".format(num)
|
||||||
|
|
||||||
|
|
||||||
|
class RadiantSoul(Feature):
|
||||||
|
"""Starting at 6th level, your link to the Celestial allows you to serve as a
|
||||||
|
conduit for radiant energy. You have resistance to radiant damage, and when
|
||||||
|
you cast a spell that deals radiant or fire damage, you can add your Cha-
|
||||||
|
risma modifier to one radiant or fire damage roll of that spell against one
|
||||||
|
of its targets.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Radiant Soul"
|
||||||
|
source = "Warlock (The Celestial Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class CelestialResilience(Feature):
|
||||||
|
"""Starting at 10th level, you gain temporary hit points whenever you finish a
|
||||||
|
short or long rest. These tempo— rary hit points equal your warlock level +
|
||||||
|
your Charisma modifier. Additionally, choose up to five creatures you can
|
||||||
|
see at the end of the rest. Those creatures each gain temporary hit points
|
||||||
|
equal to half your warlock level + your Charisma modifier
|
||||||
|
|
||||||
|
"""
|
||||||
|
_name = "Celestial Resilience"
|
||||||
|
source = "Warlock (The Celestial Patron)"
|
||||||
|
|
||||||
|
|
||||||
|
class SearingVengeance(Feature):
|
||||||
|
"""Starting at 14th level, the radiant energy you channel allows you to resist
|
||||||
|
death. When you have to make a death saving throw at the start of your
|
||||||
|
turn, you can instead spring back to your feet with a burst of radiant
|
||||||
|
energy. You regain hit points equal to half your hit point maximum, and
|
||||||
|
then you stand up if you so choose. Each creature of your choice that is
|
||||||
|
within 30 feet of you takes radiant damage equal to 2d8 + your Charisma
|
||||||
|
modifier, and it is blinded until the end of the current turn. Once you use
|
||||||
|
this feature, you can’t use it again until you finish a long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Searing Vengeance"
|
||||||
|
source = "Warlock (The Celestial Patron)"
|
||||||
|
|
||||||
|
|
||||||
# Hexblade
|
# Hexblade
|
||||||
class HexbladesCurse(Feature):
|
class HexbladesCurse(Feature):
|
||||||
"""Starting at lst level, you gain the ability to place a bale— ful curse on
|
"""Starting at lst level, you gain the ability to place a bale— ful curse on
|
||||||
@@ -204,7 +435,7 @@ class HexbladesCurse(Feature):
|
|||||||
a roll of 19 or 20 on the d20.
|
a roll of 19 or 20 on the d20.
|
||||||
|
|
||||||
--If the cursed target dies, you regain hit points equal to your warlock
|
--If the cursed target dies, you regain hit points equal to your warlock
|
||||||
level + your Charisma modifier (mini- mum of 1 hit point).
|
level + your Charisma modifier (minimum of 1 hit point).
|
||||||
|
|
||||||
You can’t use this feature again until you finish a short or long rest.
|
You can’t use this feature again until you finish a short or long rest.
|
||||||
|
|
||||||
@@ -214,7 +445,7 @@ class HexbladesCurse(Feature):
|
|||||||
|
|
||||||
|
|
||||||
class HexWarrior(Feature):
|
class HexWarrior(Feature):
|
||||||
"""At lst level, you acquire the training necessary to effec- tively arm
|
"""At lst level, you acquire the training necessary to effectively arm
|
||||||
yourself for battle. You gain proficiency with medium armor, shields, and
|
yourself for battle. You gain proficiency with medium armor, shields, and
|
||||||
martial weapons.
|
martial weapons.
|
||||||
|
|
||||||
@@ -269,7 +500,7 @@ class AccursedSpecter(Feature):
|
|||||||
|
|
||||||
|
|
||||||
class ArmorOfHexes(Feature):
|
class ArmorOfHexes(Feature):
|
||||||
"""At 10th level, your hex grows more powerful. If the tar- get cursed by your
|
"""At 10th level, your hex grows more powerful. If the target cursed by your
|
||||||
Hexblade’s Curse hits you with an attack roll, you can use your reaction to
|
Hexblade’s Curse hits you with an attack roll, you can use your reaction to
|
||||||
roll a d6. On a 4 or higher, the attack instead misses you, regardless of
|
roll a d6. On a 4 or higher, the attack instead misses you, regardless of
|
||||||
its roll.
|
its roll.
|
||||||
@@ -628,7 +859,7 @@ class WitchSight(Invocation):
|
|||||||
class AspectOfTheMoon(Invocation):
|
class AspectOfTheMoon(Invocation):
|
||||||
"""You no longer need to sleep and can’t be forced to sleep by any means. To
|
"""You no longer need to sleep and can’t be forced to sleep by any means. To
|
||||||
gain the benefits of a long rest, you can spend all 8 hours doing light
|
gain the benefits of a long rest, you can spend all 8 hours doing light
|
||||||
activity, such as read- ing your Book of Shadows and keeping watch.
|
activity, such as reading your Book of Shadows and keeping watch.
|
||||||
|
|
||||||
**Prerequisite**: Pact of the Tome
|
**Prerequisite**: Pact of the Tome
|
||||||
"""
|
"""
|
||||||
@@ -637,14 +868,14 @@ class AspectOfTheMoon(Invocation):
|
|||||||
|
|
||||||
class CloakOfFiles(Invocation):
|
class CloakOfFiles(Invocation):
|
||||||
"""As a bonus action, you can surround yourselfwith a magical aura that looks
|
"""As a bonus action, you can surround yourselfwith a magical aura that looks
|
||||||
like buzzing flies. The aura ex- tends 5 feet from you in every direction,
|
like buzzing flies. The aura extends 5 feet from you in every direction,
|
||||||
but not through total cover. It lasts until you’re incapacitated or you
|
but not through total cover. It lasts until you’re incapacitated or you
|
||||||
dismiss it as a bonus action.
|
dismiss it as a bonus action.
|
||||||
|
|
||||||
The aura grants you advantage on Charisma
|
The aura grants you advantage on Charisma
|
||||||
(Intimidation) checks but disadvantage on all other Charisma checks. Any
|
(Intimidation) checks but disadvantage on all other Charisma checks. Any
|
||||||
other creature that starts its turn in the aura takes poison damage equal
|
other creature that starts its turn in the aura takes poison damage equal
|
||||||
to your Charisma mod- ifier (minimum of O damage).
|
to your Charisma modifier (minimum of O damage).
|
||||||
|
|
||||||
Once you use this invocation, you can’t use it again until you finish a
|
Once you use this invocation, you can’t use it again until you finish a
|
||||||
short or long rest.
|
short or long rest.
|
||||||
@@ -683,7 +914,7 @@ class GhostlyGaze(Invocation):
|
|||||||
|
|
||||||
class GiftOfTheDepths(Invocation):
|
class GiftOfTheDepths(Invocation):
|
||||||
"""You can breathe underwater, and you gain a swimming speed equal to your
|
"""You can breathe underwater, and you gain a swimming speed equal to your
|
||||||
walking speed. You can also cast water breathing once without ex- pending a
|
walking speed. You can also cast water breathing once without expending a
|
||||||
spell slot. You regain the ability to do so when you finish a long rest.
|
spell slot. You regain the ability to do so when you finish a long rest.
|
||||||
|
|
||||||
**Prerequisite**: 5th level
|
**Prerequisite**: 5th level
|
||||||
@@ -694,7 +925,7 @@ class GiftOfTheDepths(Invocation):
|
|||||||
class GiftOfTheEverLivingOnes(Invocation):
|
class GiftOfTheEverLivingOnes(Invocation):
|
||||||
"""Whenever you regain hit points while your familiar is within 100 feet
|
"""Whenever you regain hit points while your familiar is within 100 feet
|
||||||
ofyou, treat any dice rolled to determine the hit points you regain as
|
ofyou, treat any dice rolled to determine the hit points you regain as
|
||||||
having rolled their maxi- mum value for you.
|
having rolled their maximum value for you.
|
||||||
|
|
||||||
**Prerequisite**: Pact of the Chain
|
**Prerequisite**: Pact of the Chain
|
||||||
"""
|
"""
|
||||||
@@ -749,7 +980,7 @@ class MaddeningHex(Invocation):
|
|||||||
Curse or Sign of Ill Omen. When you do so, you deal psychic damage to the
|
Curse or Sign of Ill Omen. When you do so, you deal psychic damage to the
|
||||||
cursed target and each creature of your choice that you can see within 5
|
cursed target and each creature of your choice that you can see within 5
|
||||||
feet of it. The psychic damage equals your Charisma modifier (minimum of 1
|
feet of it. The psychic damage equals your Charisma modifier (minimum of 1
|
||||||
dam- age). To use this invocation, you must be able to see the cursed
|
damage). To use this invocation, you must be able to see the cursed
|
||||||
target, and it must be within 30 feet ofyou.
|
target, and it must be within 30 feet ofyou.
|
||||||
|
|
||||||
**Prerequisite**: 5th level
|
**Prerequisite**: 5th level
|
||||||
|
|||||||
@@ -0,0 +1,716 @@
|
|||||||
|
from .features import (Feature, FeatureSelector)
|
||||||
|
from .. import spells, weapons
|
||||||
|
|
||||||
|
|
||||||
|
# PHB
|
||||||
|
class ArcaneRecovery(Feature):
|
||||||
|
"""You have learned to regain some of your magical energy by studying your
|
||||||
|
spellbook. Once per day when you finish a short rest, you can choose
|
||||||
|
expended spell slots to recover. The spell slots can have a combined level
|
||||||
|
that is equal to or less than half your wizard level (rounded up), and none
|
||||||
|
of the slots can be 6th level or higher. For example, if you’re a 4th-level
|
||||||
|
wizard, you can recover up to two levels worth o f spell slots. You can
|
||||||
|
recover either a 2nd-level spell slot or two 1st-level spell slots
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Arcane Recovery"
|
||||||
|
source = "Wizard"
|
||||||
|
|
||||||
|
|
||||||
|
class SpellMastery(Feature):
|
||||||
|
"""At 18th level, you have achieved such mastery over certain spells that you
|
||||||
|
can cast them at will. Choose a 1st-level wizard spell and a 2nd-level
|
||||||
|
wizard spell that are in your spellbook. You can cast those spells at their
|
||||||
|
lowest level without expending a spell slot when you have them prepared. If
|
||||||
|
you want to cast either spell at a higher level, you must expend a spell
|
||||||
|
slot as normal. By spending 8 hours in study, you can exchange one or both
|
||||||
|
o f the spells you chose for different spells of the same levels.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Spell Mastery"
|
||||||
|
source = "Wizard"
|
||||||
|
|
||||||
|
|
||||||
|
class SignatureSpells(Feature):
|
||||||
|
"""When you reach 20th level, you gain mastery over two powerful spells and
|
||||||
|
can cast them with little effort. Choose two 3rd-level wizard spells in
|
||||||
|
your spellbook as your signature spells. You always have these spells
|
||||||
|
prepared, they don’t count against the number of spells you have prepared,
|
||||||
|
and you can cast each of them once at 3rd level without expending a spell
|
||||||
|
slot. When you do so, you can’t do so again until you finish a short or
|
||||||
|
long rest. If you want to cast either spell at a higher level, you must
|
||||||
|
expend a spell slot as normal.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Signature Spells"
|
||||||
|
source = "Wizard"
|
||||||
|
|
||||||
|
|
||||||
|
# Abjuration
|
||||||
|
class AbjurationSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy an abjuration spell into your spellbook is halved.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Abjuration Savant"
|
||||||
|
source = "Wizard (School of Abjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class ArcaneWard(Feature):
|
||||||
|
"""Starting at 2nd level, you can weave magic around yourself for
|
||||||
|
protection. When you cast an abjuration spell of 1st level or higher, you
|
||||||
|
can simultaneously use a strand of the spell’s magic to create a magical
|
||||||
|
ward on yourself that lasts until you finish a long rest. The ward has hit
|
||||||
|
points equal to twice your wizard level + your Intelligence
|
||||||
|
modifier. Whenever you take damage, the ward takes the damage instead. If
|
||||||
|
this damage reduces the ward to 0 hit points, you take any remaining
|
||||||
|
damage. While the ward has 0 hit points, it can’t absorb damage, but its
|
||||||
|
magic remains. Whenever you cast an abjuration spell of 1st level or
|
||||||
|
higher, the ward regains a number of hit points equal to twice the level of
|
||||||
|
the spell. Once you create the ward, you can't create it again until you
|
||||||
|
finish a long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Arcane Ward"
|
||||||
|
source = "Wizard (School of Abjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectedWard(Feature):
|
||||||
|
"""Starting at 6th level, when a creature that you can see within 30 feet of
|
||||||
|
you takes damage, you can use your reaction to cause your Arcane Ward to
|
||||||
|
absorb that damage. If this damage reduces the ward to 0 hit points, the
|
||||||
|
warded creature takes any remaining damage
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Projected Ward"
|
||||||
|
source = "Wizard (School of Abjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class ImprovedAbjuration(Feature):
|
||||||
|
"""Beginning at 10th level, when you cast an abjuration spell that requires
|
||||||
|
you to make an ability check as a part of casting that spell (as in
|
||||||
|
counterspell and dispel magic), you add your proficiency bonus to that
|
||||||
|
ability check.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Improved Abjuration"
|
||||||
|
source = "Wizard (School of Abjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class SpellResistance(Feature):
|
||||||
|
"""Starting at 14th level, you have advantage on saving throws against
|
||||||
|
spells. Furthermore, you have resistance against the damage of spells
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Spell Resistance"
|
||||||
|
source = "Wizard (School of Abjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
# Conjuration
|
||||||
|
class ConjurationSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy a conjuration spell into your spellbook is halved.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Conjuration Savant"
|
||||||
|
source = "Wizard (School of Conjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class MinorIllusion(Feature):
|
||||||
|
"""Starting at 2nd level when you select this school, you can use your action
|
||||||
|
to conjure up an inanimate object in your hand or on the ground in an
|
||||||
|
unoccupied space that you can see within 10 feet of you. This object can be
|
||||||
|
no larger than 3 feet on a side and weigh no more than 10 pounds, and its
|
||||||
|
form must be that of a nonmagical object that you have seen. The object is
|
||||||
|
visibly magical, radiating dim light out to 5 feet. The object disappears
|
||||||
|
after 1 hour, when you use this feature again, or if it takes any damage.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Minor Illusion"
|
||||||
|
source = "Wizard (School of Conjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class BenignTransposition(Feature):
|
||||||
|
"""Starting at 6th level, you can use your action to teleport up to 30 feet to
|
||||||
|
an unoccupied space that you can see. Alternatively, you can choose a space
|
||||||
|
within range that is occupied by a Small or Medium creature. If that
|
||||||
|
creature is willing, you both teleport, swapping places. Once you use this
|
||||||
|
feature, you can’t use it again until you finish a long rest or you cast a
|
||||||
|
conjuration spell of 1st level or higher.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Benign Transposition"
|
||||||
|
source = "Wizard (School of Conjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class FocusedConjuration(Feature):
|
||||||
|
"""Beginning at 10th level, while you are concentrating on a conjuration
|
||||||
|
spell, your concentration can’t be broken as a result of taking damage
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Focused Conjuration"
|
||||||
|
source = "Wizard (School of Conjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
class DurableSummons(Feature):
|
||||||
|
"""Starting at 14th level, any creature that you summon or create with a
|
||||||
|
conjuration spell has 30 temporary hit points
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Durable Summons"
|
||||||
|
source = "Wizard (School of Conjuration)"
|
||||||
|
|
||||||
|
|
||||||
|
# Divination
|
||||||
|
class DivinationSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy a divination spell into your spellbook is halved. P
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Divination Savant"
|
||||||
|
source = "Wizard (School of Divination)"
|
||||||
|
|
||||||
|
|
||||||
|
class Portent(Feature):
|
||||||
|
"""Starting at 2nd level when you choose this school, glimpses of the future
|
||||||
|
begin to press in on your awareness. When you finish a long rest, roll two
|
||||||
|
d20s and record the numbers rolled. You can replace any attack roll, saving
|
||||||
|
throw, or ability check made by you or a creature that you can see with one
|
||||||
|
of these foretelling rolls. You must choose to do so before the roll, and
|
||||||
|
you can replace a roll in this way only once per turn. Each foretelling
|
||||||
|
roll can be used only once. When you finish a long rest, you lose any
|
||||||
|
unused foretelling rolls
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Portent"
|
||||||
|
source = "Wizard (School of Divination)"
|
||||||
|
|
||||||
|
|
||||||
|
class ExpertDivination(Feature):
|
||||||
|
"""Beginning at 6th level, casting divination spells comes so easily to you
|
||||||
|
that it expends only a fraction of your spellcasting efforts. When you cast
|
||||||
|
a divination spell of 2nd level or higher using a spell slot, you regain
|
||||||
|
one expended spell slot. The slot you regain must be of a level lower than
|
||||||
|
the spell you cast and can’t be higher than 5th level.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Expert Divination"
|
||||||
|
source = "Wizard (School of Divination)"
|
||||||
|
|
||||||
|
|
||||||
|
class TheThirdEye(Feature):
|
||||||
|
"""Starting at 10th level, you can use your action to increase your powers o f
|
||||||
|
perception. When you do so, choose one of the following benefits, which
|
||||||
|
lasts until you are incapacitated or you take a short or long rest. You
|
||||||
|
can’t use the feature again until you finish a rest.
|
||||||
|
|
||||||
|
**Darkvision**: You gain darkvision out to a range of 60 feet, as described
|
||||||
|
in chapter 8.
|
||||||
|
|
||||||
|
**Ethereal Sight**: You can see into the Ethereal Plane within 60
|
||||||
|
feet of you.
|
||||||
|
|
||||||
|
**Greater Comprehension**: You can read any language.
|
||||||
|
|
||||||
|
**See Invisibility**: You can see invisible creatures and objects within 10
|
||||||
|
feet of you that are within line of sight
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = 'The Third Eye'
|
||||||
|
source = "Wizard (School of Divination)"
|
||||||
|
|
||||||
|
|
||||||
|
class GreaterPortent(Feature):
|
||||||
|
"""Starting at 14th level, the visions in your dreams intensify and paint a
|
||||||
|
more accurate picture in your mind of what is to come. You roll three d20s
|
||||||
|
for your Portent feature, rather than two
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Greater Portent"
|
||||||
|
source = "Wizard (School of Divination)"
|
||||||
|
|
||||||
|
|
||||||
|
# Enchantment
|
||||||
|
class EnchantmentSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy an enchantment spell into your spellbook is halved
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Enchantment Savant"
|
||||||
|
source = "Wizard (School of Enchantment)"
|
||||||
|
|
||||||
|
|
||||||
|
class HypnoticGaze(Feature):
|
||||||
|
"""Starting at 2nd level when you choose this school, your soft words and
|
||||||
|
enchanting gaze can magically enthrall another creature. As an action,
|
||||||
|
choose one creature that you can see within 5 feet of you. If the target
|
||||||
|
can see or hear you, it must succeed on a Wisdom saving throw against your
|
||||||
|
wizard spell save DC or be charmed by you until the end of your next
|
||||||
|
turn. The charmed creature’s speed drops to 0, and the creature is
|
||||||
|
incapacitated and visibly dazed.
|
||||||
|
|
||||||
|
On subsequent turns, you can use your action to maintain this effect,
|
||||||
|
extending its duration until the end of your next turn. However, the effect
|
||||||
|
ends if you move more than 5 feet away from the creature, if the creature
|
||||||
|
can neither see nor hear you, or if the creature takes damage. Once the
|
||||||
|
effect ends, or if the creature succeeds on its initial saving throw
|
||||||
|
against this effect, you can’t use this feature on that creature again
|
||||||
|
until you finish a long rest
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Hypnotic Gaze"
|
||||||
|
source = "Wizard (School of Enchantment)"
|
||||||
|
|
||||||
|
|
||||||
|
class InstinctiveGaze(Feature):
|
||||||
|
"""Beginning at 6th level, when a creature you can see within 30 feet of you
|
||||||
|
makes an attack roll against you, you can use your reaction to divert the
|
||||||
|
attack, provided that another creature is within the attack’s range. The
|
||||||
|
attacker must make a W isdom saving throw against your wizard spell save
|
||||||
|
DC. On a failed save, the attacker must target the creature that is closest
|
||||||
|
to it, not including you or itself. If multiple creatures are closest, the
|
||||||
|
attacker chooses which one to target. On a successful save, you can’t use
|
||||||
|
this feature on the attacker again until you finish a long rest. You must
|
||||||
|
choose to use this feature before knowing whether the attack hits or
|
||||||
|
misses. Creatures that can’t be charmed are immune to this effect.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Instinctive Gaze"
|
||||||
|
source = "Wizard (School of Enchanment)"
|
||||||
|
|
||||||
|
|
||||||
|
class SplitEnchantment(Feature):
|
||||||
|
"""Starting at 10th level, when you cast an enchantment spell of 1st level or
|
||||||
|
higher that targets only one creature, you can have it target a second
|
||||||
|
creature.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Split Enchantment"
|
||||||
|
source = "Wizard (School of Enchanment)"
|
||||||
|
|
||||||
|
|
||||||
|
class AlterMemories(Feature):
|
||||||
|
"""At 14th level, you gain the ability to make a creature unaware of your
|
||||||
|
magical influence on it. When you cast an enchantment spell to charm one or
|
||||||
|
more creatures, you can alter one creature’s understanding so that it
|
||||||
|
remains unaware of being charmed. Additionally, once before the spell
|
||||||
|
expires, you can use your action to try to make the chosen creature forget
|
||||||
|
some of the time it spent charmed. The creature must succeed on an
|
||||||
|
Intelligence saving throw against your wizard spell save DC or lose a
|
||||||
|
number of hours of its memories equal to 1 + your Charisma modifier
|
||||||
|
(minimum 1). You can make the creature forget less time, and the amount of
|
||||||
|
time can’t exceed the duration of your enchantment spell.
|
||||||
|
|
||||||
|
"""
|
||||||
|
_name = "Alter Memories"
|
||||||
|
source = "Wizard (School of Enchanment)"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
num = 1 + max(0, self.owner.charisma.modifier)
|
||||||
|
return self._name + " ({:d} hours)".format(num)
|
||||||
|
|
||||||
|
|
||||||
|
# Evocation
|
||||||
|
class EvocationSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy an evocation spell into your spellbook is halved.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Evocation Savant"
|
||||||
|
source = "Wizard (School of Evocation)"
|
||||||
|
|
||||||
|
|
||||||
|
class SculptSpells(Feature):
|
||||||
|
"""Beginning at 2nd level, you can create pockets of relative safety within the
|
||||||
|
effects of your evocation spells. When you cast an evocation spell that
|
||||||
|
affects other creatures that you can see, you can choose a number of them
|
||||||
|
equal to 1 + the spell’s level. The chosen creatures automatically succeed
|
||||||
|
on their saving throws against the spell, and they take no damage if they
|
||||||
|
would normally take half damage on a successful save
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Sculpt Spells"
|
||||||
|
source = "Wizard (School of Evocation)"
|
||||||
|
|
||||||
|
|
||||||
|
class PotentCantrip(Feature):
|
||||||
|
"""Starting at 6th level, your damaging cantrips affect even creatures that
|
||||||
|
avoid the brunt of the effect. When a creature succeeds on a saving throw
|
||||||
|
against your cantrip, the creature takes half the cantrip’s damage (if any)
|
||||||
|
but suffers no additional effect from the cantrip
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Potent Cantrip"
|
||||||
|
source = "Wizard (School of Evocation)"
|
||||||
|
|
||||||
|
|
||||||
|
class EmpoweredEvocation(Feature):
|
||||||
|
"""Beginning at 10th level, you can add your Intelligence modifier to the
|
||||||
|
damage roll of any wizard evocation spell you cast
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Empowered Evocation"
|
||||||
|
source = "Wizard (School of Evocation)"
|
||||||
|
|
||||||
|
|
||||||
|
class Overchannel(Feature):
|
||||||
|
"""Starting at 14th level, you can increase the power of your simpler
|
||||||
|
spells. When you cast a wizard spell of 5th level or lower that deals
|
||||||
|
damage, you can deal maximum damage with that spell. The first time you do
|
||||||
|
so, you suffer no adverse effect. If you use this feature again before you
|
||||||
|
finish a long rest, you take 2d12 necrotic damage for each level of the
|
||||||
|
spell, immediately after you cast it. Each time you use this feature again
|
||||||
|
before finishing a long rest, the necrotic damage per spell level increases
|
||||||
|
by 1d12. This damage ignores resistance and immunity.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Overchannel"
|
||||||
|
source = "Wizard (School of Evocation)"
|
||||||
|
|
||||||
|
|
||||||
|
# Illusion
|
||||||
|
class IllusionSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy an illusion spell into your spellbook is halved.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Illusion Savant"
|
||||||
|
source = "Wizard (School of Illusion)"
|
||||||
|
|
||||||
|
|
||||||
|
class ImprovedMinorIllusion(Feature):
|
||||||
|
"""When you choose this school at 2nd level, you learn the minor illusion
|
||||||
|
cantrip. If you already know this cantrip, you learn a different wizard
|
||||||
|
cantrip of your choice. The cantrip doesn’t count against your number of
|
||||||
|
cantrips known. When you cast minor illusion, you can create both a sound
|
||||||
|
and an image with a single casting o f the spell.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Improved Minor Illusion"
|
||||||
|
source = "Wizard (School of Illusion)"
|
||||||
|
|
||||||
|
|
||||||
|
class MalleableIllusions(Feature):
|
||||||
|
"""Starting at 6th level, when you cast an illusion spell that has a duration
|
||||||
|
of 1 minute or longer, you can use your action to change the nature of that
|
||||||
|
illusion (using the spell’s normal parameters for the illusion), provided
|
||||||
|
that you can see the illusion
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Malleable Illusions"
|
||||||
|
source = "Wizard (School of Illusion)"
|
||||||
|
|
||||||
|
|
||||||
|
class IllusorySelf(Feature):
|
||||||
|
"""Beginning at 10th level, you can create an illusory duplicate of yourself
|
||||||
|
as an instant, almost instinctual reaction to danger. When a creature makes
|
||||||
|
an attack roll against you, you can use your reaction to interpose the
|
||||||
|
illusory duplicate between the attacker and yourself. The attack
|
||||||
|
automatically m isses you, then the illusion dissipates. Once you use this
|
||||||
|
feature, you can’t use it again until you finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Illusory Self"
|
||||||
|
source = "Wizard (School of Illusion)"
|
||||||
|
|
||||||
|
|
||||||
|
class IllusoryReality(Feature):
|
||||||
|
"""By 14th level, you have learned the secret of weaving shadow magic into
|
||||||
|
your illusions to give them a semi- reality. When you cast an illusion
|
||||||
|
spell of 1st level or higher, you can choose one inanimate, nonmagical
|
||||||
|
object that is part of the illusion and make that object real. You can do
|
||||||
|
this on your turn as a bonus action while the spell is ongoing. The object
|
||||||
|
remains real for 1 minute. For example, you can create an illusion of a
|
||||||
|
bridge over a chasm and then make it real long enough for your allies to
|
||||||
|
cross. The object can’t deal damage or otherwise directly harm anyone
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Illusory Reality"
|
||||||
|
source = "Wizard (School of Illusion)"
|
||||||
|
|
||||||
|
|
||||||
|
# Necromancy
|
||||||
|
class NecromancySavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy an Necromancy spell into your spellbook is halved.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Necromancy Savant"
|
||||||
|
source = "Wizard (School of Necromancy)"
|
||||||
|
|
||||||
|
|
||||||
|
class GrimHarvest(Feature):
|
||||||
|
"""At 2nd level, you gain the ability to reap life energy from creatures you
|
||||||
|
kill with your spells. Once per turn when you kill one or more creatures
|
||||||
|
with a spell of 1st level or higher, you regain hit points equal to twice
|
||||||
|
the spell’s level, or three times its level if the spell belongs to the
|
||||||
|
School of Necromancy. You don’t gain this benefit for killing constructs or
|
||||||
|
undead """
|
||||||
|
name = "Grim Harvest"
|
||||||
|
source = "Wizard (School of Necromancy)"
|
||||||
|
|
||||||
|
|
||||||
|
class UndeadThralls(Feature):
|
||||||
|
"""At 6th level, you add the animate dead spell to your spellbook if it is not
|
||||||
|
there already. When you cast animate dead, you can target one additional
|
||||||
|
corpse or pile of bones, creating another zombie or skeleton, as
|
||||||
|
appropriate. Whenever you create an undead using a necromancy spell, it has
|
||||||
|
additional benefits:
|
||||||
|
|
||||||
|
-- The creature’s hit point maximum is increased by an amount equal to your
|
||||||
|
wizard level.
|
||||||
|
|
||||||
|
-- The creature adds your proficiency bonus to its weapon damage rolls
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Undead Thralls"
|
||||||
|
source = "Wizard (School of Necromancy)"
|
||||||
|
spells_known = (spells.AnimateDead,)
|
||||||
|
|
||||||
|
|
||||||
|
class InuredToUndeath(Feature):
|
||||||
|
"""Beginning at 10th level, you have resistance to necrotic damage, and your
|
||||||
|
hit point maximum can't be reduced. You have spent so much time dealing
|
||||||
|
with undead and the forces that animate them that you have become inured to
|
||||||
|
some of their worst effects
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Inured to Undeath"
|
||||||
|
source = "Wizard (School of Necromancy)"
|
||||||
|
|
||||||
|
|
||||||
|
class CommandUndead(Feature):
|
||||||
|
"""Starting at 14th level, you can use magic to bring undead under your
|
||||||
|
control, even those created by other wizards. As an action, you can choose
|
||||||
|
one undead that you can see within 60 feet of you. That creature must make
|
||||||
|
a Charisma saving throw against your wizard spell save DC. If it succeeds,
|
||||||
|
you can’t use this feature on it again. If it fails, it becomes friendly to
|
||||||
|
you and obeys your commands until you use this feature again. Intelligent
|
||||||
|
undead are harder to control in this way. If the target has an
|
||||||
|
Intelligence of 8 or higher, it has advantage on the saving throw. If it
|
||||||
|
fails the saving throw and has an Intelligence of 12 or higher, it can
|
||||||
|
repeat the saving throw at the end of every hour until it succeeds and
|
||||||
|
breaks free
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Command Undead"
|
||||||
|
source = "Wizard (School of Necromancy)"
|
||||||
|
|
||||||
|
|
||||||
|
# Transmutation
|
||||||
|
class TransmutationSavant(Feature):
|
||||||
|
"""Beginning when you select this school at 2nd level, the gold and time you
|
||||||
|
must spend to copy an Transmutation spell into your spellbook is halved.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Transmutation Savant"
|
||||||
|
source = "Wizard (School of Transmutation)"
|
||||||
|
|
||||||
|
|
||||||
|
class MinorAlchemy(Feature):
|
||||||
|
"""Starting at 2nd level when you select this school, you can temporarily alter
|
||||||
|
the physical properties of one nonmagical object, changing it from one
|
||||||
|
substance into another. You perform a special alchemical procedure on one
|
||||||
|
object composed entirely of wood, stone (but not a gemstone), iron, copper,
|
||||||
|
or silver, transforming it into a different one of those materials. For
|
||||||
|
each 10 minutes you spend performing the procedure, you can transform up to
|
||||||
|
1 cubic foot of material. After 1 hour, or until you lose your
|
||||||
|
concentration (as if you were concentrating on a spell), the material
|
||||||
|
reverts to its original substance
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Minor Alchemy"
|
||||||
|
source = "Wizard (School of Transmutation)"
|
||||||
|
|
||||||
|
|
||||||
|
class TransmutersStone(Feature):
|
||||||
|
"""Starting at 6th level, you can spend 8 hours creating a transmuter’s stone
|
||||||
|
that stores transmutation magic. You can benefit from the stone yourself or
|
||||||
|
give it to another creature. A creature gains a benefit of your choice as
|
||||||
|
long as the stone is in the creature’s possession. When you create the
|
||||||
|
stone, choose the benefit from the following options:
|
||||||
|
|
||||||
|
-- Darkvision out to a range of 60 feet, as described in chapter 8
|
||||||
|
|
||||||
|
-- An increase to speed of 10 feet while the creature is unencumbered •
|
||||||
|
Proficiency in Constitution saving throws
|
||||||
|
|
||||||
|
-- Resistance to acid, cold, fire, lightning, or thunder damage (your
|
||||||
|
choice whenever you choose this benefit)
|
||||||
|
|
||||||
|
Each time you cast a transmutation spell of 1st level or higher, you can
|
||||||
|
change the effect of your stone if the stone is on your person. If you
|
||||||
|
create a new transmuter’s stone, the previous one ceases to function
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Transmuter's Stone"
|
||||||
|
source = "Wizard (School of Transmutation)"
|
||||||
|
|
||||||
|
|
||||||
|
class Shapechanger(Feature):
|
||||||
|
"""At 10th level, you add the polymorph spell to your spellbook, if it is not
|
||||||
|
there already. You can cast polymorph without expending a spell slot. When
|
||||||
|
you do so, you can target only yourself and transform into a beast whose
|
||||||
|
challenge rating is 1 or lower. Once you cast polymorph in this way, you
|
||||||
|
can’t do so again until you finish a short or long rest, though you can
|
||||||
|
still cast it normally using an available spell slot
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Shapechanger"
|
||||||
|
source = "Wizard (School of Transmutation)"
|
||||||
|
spells_known = spells_prepared = (spells.Polymorph,)
|
||||||
|
|
||||||
|
|
||||||
|
class MasterTransmuter(Feature):
|
||||||
|
"""Starting at 14th level, you can use your action to consume the reserve of
|
||||||
|
transmutation magic stored within your transmuter’s stone in a single
|
||||||
|
burst. When you do so, choose one of the following effects. Your
|
||||||
|
transmuter’s stone is destroyed and can’t be remade until you finish a long
|
||||||
|
rest.
|
||||||
|
|
||||||
|
**Major Transformation**: You can transmute one nonmagical object—no
|
||||||
|
larger than a 5-foot cube—into another nonmagical object of similar size
|
||||||
|
and mass and of equal or lesser value. You must spend 10 minutes handling
|
||||||
|
the object to transform it.
|
||||||
|
|
||||||
|
**Panacea**: You remove all curses, diseases, and poisons affecting a creature
|
||||||
|
that you touch with the transmuter’s stone. The creature also regains all
|
||||||
|
its hit points.
|
||||||
|
|
||||||
|
**Restore Life**: You cast the raise dead spell on a creature you touch
|
||||||
|
with the transmuter’s stone, without expending a spell slot or needing to
|
||||||
|
have the spell in your spellbook.
|
||||||
|
|
||||||
|
**Restore Youth**: You touch the transmuter’s stone to a willing creature,
|
||||||
|
and that creature’s apparent age is reduced by 3d10 years, to a minimum of
|
||||||
|
13 years. This effect doesn’t extend the creature’s lifespan
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Master Transmuter"
|
||||||
|
source = "Wizard (School of Transmutation)"
|
||||||
|
|
||||||
|
|
||||||
|
# Bladesinging
|
||||||
|
class Bladesong(Feature):
|
||||||
|
"""Starting at 2nd level, you can invoke a secret elven magic called the
|
||||||
|
Bladesong, provided that you aren't wearing medium or heavy armor or using
|
||||||
|
a shield. It graces you with supernatural speed, agility, and focus. You
|
||||||
|
can use a bonus action to start the Bladesong, which lasts for 1 minute. It
|
||||||
|
ends early if you are incapac- itated, if you don medium or heavy armor or
|
||||||
|
a shield, or if you use two hands to make an attack with a weapon. You can
|
||||||
|
also dismiss the Bladesong at any time you choose (no action required).
|
||||||
|
|
||||||
|
While your Bladesong is active, you gain the follow- ing benefits:
|
||||||
|
|
||||||
|
-- You gain a bonus to your AC equal to your Intelligence modifier (minimum
|
||||||
|
of +1).
|
||||||
|
|
||||||
|
-- Your walking speed increases by 10 feet.
|
||||||
|
|
||||||
|
-- You have advantage on Dexterity (Acrobatics) checks.
|
||||||
|
|
||||||
|
-- You gain a bonus to any Constitution saving throw you make to maintain
|
||||||
|
your concentration on a spell. The bonus equals your Intelligence modifier
|
||||||
|
(minimum of +l).
|
||||||
|
|
||||||
|
You can use this feature twice. You regain all expended uses of it when
|
||||||
|
you finish a short or long rest.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Bladesong (2x/SR)"
|
||||||
|
source = "Wizard (School of Bladesinging)"
|
||||||
|
|
||||||
|
|
||||||
|
class ExtraAttackBladesinging(Feature):
|
||||||
|
"""Starting at 6th level, you can attack twice, instead of once, whenever you
|
||||||
|
take the Attack action on your turn.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Extra Attack (2x)"
|
||||||
|
source = "Wizard (School of Bladesinging)"
|
||||||
|
|
||||||
|
|
||||||
|
class SongOfDefense(Feature):
|
||||||
|
"""Beginning at 10th level, you can direct your magic to ab- sorb damage
|
||||||
|
while your Bladesong is active. When you take damage, you can use your
|
||||||
|
reaction to expend one spell slot and reduce that damage to you by an
|
||||||
|
amount equal to five times the spell slot's level.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Song of Defense"
|
||||||
|
source = "Wizard (School of Bladesinging)"
|
||||||
|
|
||||||
|
|
||||||
|
class SongOfVictory(Feature):
|
||||||
|
"""Starting at 14th level, you add your Intelligence modifier (minimum of +1)
|
||||||
|
to the damage of your melee weapon attacks while you r Bladesong is active
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Song of Victory"
|
||||||
|
source = "Wizard (School of Bladesinging)"
|
||||||
|
|
||||||
|
|
||||||
|
# War Magic
|
||||||
|
class ArcaneDeflection(Feature):
|
||||||
|
"""At 2nd level, you have learned to weave your magic to fortify yourself
|
||||||
|
against harm. When you are hit by an at- tack or you fail a saving throw,
|
||||||
|
you can use your reaction to gain a +2 bonus to your AC against that attack
|
||||||
|
or a +4 bonus to that saving throw. When you use this feature, you can't
|
||||||
|
cast spells other than cantrips until the end of your next turn.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Arcane Deflection"
|
||||||
|
source = "Wizard (School of War Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class TacticalWit(Feature):
|
||||||
|
"""Starting at 2nd level, your keen ability to assess tactical situations
|
||||||
|
allows you to act quickly in battle. You can give yourself a bonus to your
|
||||||
|
initiative rolls equal to your Intelligence modifier (included in stats on
|
||||||
|
character sheet).
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Tactical Wit"
|
||||||
|
source = "Wizard (School of War Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class PowerSurge(Feature):
|
||||||
|
"""Starting at 6th level, you can store magical energy within yourself to
|
||||||
|
later empower your damaging spells. In its stored form, this energy is
|
||||||
|
called a power surge. You can store a maximum number of power surges equal
|
||||||
|
to your Intelligence modifier (minimum of one). Whenever you finish a long
|
||||||
|
rest, your number of power surges reset-s to one. Whenever you successfully
|
||||||
|
end a spell with dispel magic or counterspel], you gain one power surge, as
|
||||||
|
you steal magic from the spell you foiled. If you end a short rest with no
|
||||||
|
power surges, you gain one power surge
|
||||||
|
|
||||||
|
Once per turn when you deal damage to a creature or object with a wizard
|
||||||
|
spell, you can spend one power surge to deal extra force damage to that
|
||||||
|
target. The ex- tra damage equals half your wizard level.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Power Surge"
|
||||||
|
source = "Wizard (School of War Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class DurableMagic(Feature):
|
||||||
|
"""Beginning at 10th level, the magic you channel helps ward off harm. While
|
||||||
|
you maintain concentration on a spell, you have a +2 bonus to AC and all
|
||||||
|
saving throws.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Durable Magic"
|
||||||
|
source = "Wizard (School of War Magic)"
|
||||||
|
|
||||||
|
|
||||||
|
class DeflectingShroud(Feature):
|
||||||
|
"""At 14th level, your Arcane Deflection becomes infused with deadly
|
||||||
|
magic. When you use your Arcane Deflec- tion feature, you can cause magical
|
||||||
|
energy to are from you. Up to three creatures ofyour choice that you can
|
||||||
|
see within 60 feet of you each take force damage equal to half your wizard
|
||||||
|
level.
|
||||||
|
|
||||||
|
"""
|
||||||
|
name = "Deflecting Shroud"
|
||||||
|
source = "Wizard (School of War Magic)"
|
||||||
|
|||||||
@@ -1813,5 +1813,139 @@ class GaseousForm(Spell):
|
|||||||
ritual = False
|
ritual = False
|
||||||
magic_school = "Transmutation"
|
magic_school = "Transmutation"
|
||||||
classes = ('Sorcerer', 'Warlock', 'Wizard')
|
classes = ('Sorcerer', 'Warlock', 'Wizard')
|
||||||
|
class RopeTrick(Spell):
|
||||||
|
"""You touch a length of rope that is up to 60 feet long. One end of the rope then
|
||||||
|
rises into the air until the whole rope hangs perpendicular to the ground. At
|
||||||
|
the upper end of the rope, an invisible entrance opens to an extradimensional
|
||||||
|
space that lasts until the spell ends.
|
||||||
|
|
||||||
|
The extradimensional space can be
|
||||||
|
reached by climbing to the top of the rope. The space can hold as many as eight
|
||||||
|
Medium or smaller creatures. The rope can be pulled into the space, making the
|
||||||
|
rope disappear from view outside the space.
|
||||||
|
|
||||||
|
Attacks and spells can’t cross
|
||||||
|
through the entrance into or out of the extradimensional space, but those inside
|
||||||
|
can see out of it as if through a 3-foot-by-5-foot window centered on the rope.
|
||||||
|
|
||||||
|
|
||||||
|
Anything inside the extradimensional space drops out when the spell ends.
|
||||||
|
"""
|
||||||
|
name = "Rope Trick"
|
||||||
|
level = 2
|
||||||
|
casting_time = "1 action"
|
||||||
|
casting_range = "Touch"
|
||||||
|
components = ('V', 's', 'm')
|
||||||
|
materials = """Powdered corn extract and a twisted loop of parchment"""
|
||||||
|
duration = "1 hour"
|
||||||
|
ritual = False
|
||||||
|
magic_school = "Transmutation"
|
||||||
|
classes = ('Wizard',)
|
||||||
|
|
||||||
|
|
||||||
|
class Seeming(Spell):
|
||||||
|
"""This spell allows you to change the appearance of any number of creatures that
|
||||||
|
you can see within range.
|
||||||
|
You give each target you choose a new, illusory
|
||||||
|
appearance. An unwilling target can make a Charisma saving throw, and if it
|
||||||
|
succeeds, it is unaffected by this spell.
|
||||||
|
|
||||||
|
The spell disguises physicial
|
||||||
|
appearances as well as clothing, armor, weapons, and equipment. You can make
|
||||||
|
each creature seem 1 foot shorter or taller and appear thin, fat, or inbetween.
|
||||||
|
You can’t change a target’s body type, so you must choose a form that has the
|
||||||
|
same basic arrangement of limbs. Otherwise, the extent of the illusion is up to
|
||||||
|
you. The spell lasts for the duration, unless you use your action to dismiss it
|
||||||
|
sooner.
|
||||||
|
|
||||||
|
The changes wrought by this spell fail to hold up to physical
|
||||||
|
inspections. For example, if you use this spell to add a hat to a creature’s
|
||||||
|
outfitm objects pass through the hat, and anyone who touches it would feel
|
||||||
|
nothing or would feel the creature’s head and hair. If you use this spell to
|
||||||
|
appear thinner then you are, the hand of someone who reaches out to touch you
|
||||||
|
would bump into you while it was seemingly still in midair.
|
||||||
|
|
||||||
|
A creature can use
|
||||||
|
its action to inspect a target and make an Intelligence (Investigation) check
|
||||||
|
against your spell save DC. If it succeeds, it becomes aware that the target is
|
||||||
|
disguised.
|
||||||
|
"""
|
||||||
|
name = "Seeming"
|
||||||
|
level = 5
|
||||||
|
casting_time = "1 action"
|
||||||
|
casting_range = "30 feet"
|
||||||
|
components = ('V', 's')
|
||||||
|
materials = """"""
|
||||||
|
duration = "8 hours"
|
||||||
|
ritual = False
|
||||||
|
magic_school = "Illusion"
|
||||||
|
classes = ('Bard', 'Sorcerer', 'Wizard')
|
||||||
|
|
||||||
|
|
||||||
|
class GlyphOfWarding(Spell):
|
||||||
|
"""When you cast this spell, you inscribe a glyph that harms other creatures,
|
||||||
|
either upon a surface (such as a table or a section of floor or wall) or within
|
||||||
|
an object that can be closed (such as a book, a scroll, or a treasure chest) to
|
||||||
|
conceal the glyph.
|
||||||
|
If you choose a surface, the glyph can cover an area of the
|
||||||
|
surface no larger than 10 feet in diameter. If you choose an object, that object
|
||||||
|
must remain in its place; if the object is moved more than 10 feet from where
|
||||||
|
you cast this spell, the glyph is broken, and the spell ends without being
|
||||||
|
triggered.
|
||||||
|
|
||||||
|
The glyph is nearly invisible and requires a successful Intelligence
|
||||||
|
(Investigation) check against your spell save DC to be found.
|
||||||
|
|
||||||
|
You decide what
|
||||||
|
triggers the glyph when you cast the spell. For glyphs inscribed on a surface,
|
||||||
|
the most typical triggers include touching or standing on the glyph, removing
|
||||||
|
another object covering the glyph, approaching within a certain distance of the
|
||||||
|
glyph, or manipulating the object on which the glyph is inscribed. For glyphs
|
||||||
|
inscribed within an object, the most common triggers include opening that
|
||||||
|
object, approaching within a certain distance of the object, or seeing or
|
||||||
|
reading the glyph. Once a glyph is triggered, this spell ends.
|
||||||
|
|
||||||
|
You can further
|
||||||
|
refine the trigger so the spell activates only under certain circumstances or
|
||||||
|
according to physical characteristics (such as height or weight), creature kind
|
||||||
|
(for example, the ward could be set to affect aberrations or drow), or
|
||||||
|
alignment. You can also set conditions for creatures that don’t trigger the
|
||||||
|
glyph, such as those who say a certain password.
|
||||||
|
|
||||||
|
When you inscribe the glyph,
|
||||||
|
choose explosive runes or a spell glyph.
|
||||||
|
|
||||||
|
Explosive Runes
|
||||||
|
When triggered, the
|
||||||
|
glyph erupts with magical energy in a 20-foot-radius sphere centered on the
|
||||||
|
glyph. The sphere spreads around corners. Each creature in the area must make a
|
||||||
|
Dexterity saving throw. A creature takes 5d8 acid, cold, fire, lightning, or
|
||||||
|
thunder damage on a failed saving throw (your choice when you create the glyph),
|
||||||
|
or half as much damage on a successful one.
|
||||||
|
|
||||||
|
Spell Glyph
|
||||||
|
You can store a
|
||||||
|
prepared spell of 3rd level or lower in the glyph by casting it as part of
|
||||||
|
creating the glyph. The spell must target a single creature or an area. The
|
||||||
|
spell being stored has no immediate effect when cast in this way. When the glyph
|
||||||
|
is triggered, the stored spell is cast. If the spell has a target, it targets
|
||||||
|
the creature that triggered the glyph. If the spell affects an area, the area is
|
||||||
|
centered on that creature. If the spell summons hostile creatures or creates
|
||||||
|
harmful objects or traps, they appear as close as possible to the intruder and
|
||||||
|
attack it. If the spell requires concentration, it lasts until the end of its
|
||||||
|
full duration.
|
||||||
|
|
||||||
|
At Higher Levels:
|
||||||
|
"""
|
||||||
|
name = "Glyph Of Warding"
|
||||||
|
level = 3
|
||||||
|
casting_time = "1 hour"
|
||||||
|
casting_range = "Touch"
|
||||||
|
components = ('V', 's', 'm')
|
||||||
|
materials = """Incense and powdered diamond worth at least 200 gp, which the spell consumes"""
|
||||||
|
duration = "Until dispelled or triggered"
|
||||||
|
ritual = False
|
||||||
|
magic_school = "Abjuration"
|
||||||
|
classes = ('you', 'cast', 'this', 'spell', 'using', 'a', 'spell', 'slot', 'of', '4th', 'level', 'or', 'higher', 'the', 'damage', 'of', 'an', 'explosive', 'runes', 'glyph', 'increases', 'by', '1d8', 'for', 'each', 'slot', 'level', 'above', '3rd.', 'If', 'you', 'create', 'a', 'spell', 'glyph', 'you', 'can', 'store', 'any', 'spell', 'of', 'up', 'to', 'the', 'same', 'level', 'as', 'the', 'slot', 'you', 'use', 'for', 'the', 'glyph', 'of')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+25
-1
@@ -4,7 +4,9 @@ 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, SoulOfTheForge)
|
SeaSoul, JackOfAllTrades, SoulOfTheForge, QuickDraw,
|
||||||
|
NaturalExplorerRevised, FeralInstinct, DreadAmbusher,
|
||||||
|
SuperiorMobility, AmbushMaster, RakishAudacity)
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
|
||||||
|
|
||||||
@@ -162,6 +164,8 @@ class Speed():
|
|||||||
if char.has_feature(FastMovement):
|
if char.has_feature(FastMovement):
|
||||||
if not isinstance(char.armor, HeavyArmor):
|
if not isinstance(char.armor, HeavyArmor):
|
||||||
speed += 10
|
speed += 10
|
||||||
|
if char.has_feature(SuperiorMobility):
|
||||||
|
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):
|
||||||
@@ -173,3 +177,23 @@ class Speed():
|
|||||||
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)
|
||||||
|
|
||||||
|
|
||||||
|
class Initiative():
|
||||||
|
"""A character's initiative"""
|
||||||
|
def __get__(self, char, Character):
|
||||||
|
ini = char.dexterity.modifier
|
||||||
|
if char.has_feature(QuickDraw):
|
||||||
|
ini += char.proficiency_bonus
|
||||||
|
if char.has_feature(DreadAmbusher):
|
||||||
|
ini += char.wisdom.modifier
|
||||||
|
if char.has_feature(RakishAudacity):
|
||||||
|
ini += char.charisma.modifier
|
||||||
|
ini = '{:+d}'.format(ini)
|
||||||
|
has_advantage = (char.has_feature(NaturalExplorerRevised) or
|
||||||
|
char.has_feature(FeralInstinct) or
|
||||||
|
char.has_feature(AmbushMaster))
|
||||||
|
if has_advantage:
|
||||||
|
ini += '(A)'
|
||||||
|
return ini
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user