Files
dungeon-sheets/dungeonsheets/features/ranger.py
T
2020-05-05 23:00:17 +02:00

883 lines
32 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from dungeonsheets import armor, weapons
from dungeonsheets.features.features import Feature, FeatureSelector
from dungeonsheets.features.rogue import Evasion, UncannyDodge
# 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):
"""
You gain a +2 bonus to attack rolls you make
with ranged weapons (included in stats on Character Sheet).
"""
name = "Fighting Style (Archery)"
source = "Ranger"
def weapon_func(self, weapon: weapons.Weapon, **kwargs):
"""
+2 attack roll bonus if weapon is ranged
"""
if isinstance(weapon, weapons.RangedWeapon):
weapon.attack_bonus += 2
class Defense(Feature):
"""
While you are wearing armor, you gain a +1 bonus to AC (included in
stats on Character Sheet).
"""
name = "Fighting Style (Defense)"
source = "Ranger"
class Dueling(Feature):
"""When you are wielding a melee weapon in one hand and no other weapons, you
gain a +2 bonus to damage rolls with that weapon.
"""
name = "Fighting Style (Dueling)"
source = "Ranger"
def weapon_func(self, weapon: weapons.Weapon, **kwargs):
"""
+2 attack roll bonus if melee weapon is not two handed
"""
if (isinstance(weapon, weapons.MeleeWeapon)
and "two-handed" not in weapon.properties.lower()):
weapon.damage_bonus += 2
class TwoWeaponFighting(Feature):
"""When you engage in two-weapon fighting, you can add your ability modifier
to the damage of the second attack.
"""
name = "Fighting Style (Two-Weapon Fighting)"
source = "Ranger"
class RangerFightingStyle(FeatureSelector):
"""
Select a Fighting Style by choosing in feature_choices:
archery
defense
dueling
two-weapon fighting
"""
options = {'archery': Archery,
'defense': Defense,
'dueling': Dueling,
'two-weapon fighting': TwoWeaponFighting,
'two-weapon': TwoWeaponFighting,
'dual wield': TwoWeaponFighting}
name = "Fighting Style (Select One)"
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 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)"
needs_implementation = True
def __init__(self, owner=None):
super().__init__(owner=owner)
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 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 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
class FavoredEnemyRevised(Feature):
"""Beginning at 1st level, you have significant experience studying, tracking,
hunting, and even talking to a certain type of enemy commonly encountered
in the wilds.
Choose a type of favored enemy: beasts, fey, humanoids, monstrosities, or
undead. You gain a +2 bonus to damage rolls with weapon attacks against
creatures of the chosen type. Additionally, 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,
typically one spoken by your favored enemy or creatures associated with
it. However, you are free to pick any language you wish to learn
"""
name = "Favored Enemy"
source = "Revised Ranger"
class NaturalExplorerRevised(Feature):
"""You are a master of navigating the natural world, and you react with swift
and decisive action when attacked. This grants you the following benefits:
--You ignore difficult terrain.
--You have advantage on initiative rolls.
--On your first turn during combat, you have advantage on attack rolls
against creatures that have not yet acted.
In addition, you are skilled at navigating the wilderness. You gain the
following benefits when traveling for an hour or more:
--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 = "Revised Ranger"
class PrimevalAwarenessRevised(Feature):
"""Beginning at 3rd level, your mastery of ranger lore allows you to establish
a powerful link to beasts and to the land around you.
You have an innate ability to communicate with beasts, and they recognize
you as a kindred spirit. Through sounds and gestures, you can communicate
simple ideas to a beast as an action, and can read its basic mood and
intent. You learn its emotional state, whether it is affected by magic of
any sort, its short-term needs (such as food or safety), and actions you
can take (if any) to persuade it to not attack.
You cannot use this ability against a creature that you have attacked
within the past 10 minutes.
Additionally, you can attune your senses to determine if any of your
favored enemies lurk nearby. By spending 1 uninterrupted minute in
concentration (as if you were concentrating on a spell), you can sense
whether any of your favored enemies are present within 5 miles of you. This
feature reveals which of your favored enemies are present, their numbers,
and the creatures' general direction and distance (in miles) from you.
If there are multiple groups of your favored enemies within range, you
learn this information for each group.
"""
name = "Primeval Awareness"
source = "Revised Ranger"
class GreaterFavoredEnemy(Feature):
"""At 6th level, you are ready to hunt even deadlier game. Choose a type of
greater favored enemy: aberrations, celestials, constructs, dragons,
elementals, fiends, or giants. You gain all the benefits against this
chosen enemy that you normally gain against your favored enemy, including
an additional language. Your bonus to damage rolls against all your favored
enemies increases to +4.
Additionally, you have advantage on saving throws against the spells and
abilities used by a greater favored enemy.
"""
name = "Greated Favored Enemy"
source = "Revised Ranger"
class FleetOfFoot(Feature):
"""Beginning at 8th level, you can use the Dash action as a bonus action on
your turn.
"""
name = "Fleet of Foot"
source = "Revised Ranger"
class HideInPlainSightRevised(Feature):
"""Starting at 10th level, you can remain perfectly still for long periods of
time to set up ambushes.
When you attempt to hide on your turn, you can opt to not move on that
turn. If you avoid moving, creatures that attempt to detect you take a 10
penalty to their Wisdom (Perception) checks until the start of your next
turn. You lose this benefit if you move or fall prone, either 4 voluntarily
or because of some external effect. You are still automatically detected if
any effect or action causes you to no longer be hidden.
If you are still hidden on your next turn, you can continue to remain
motionless and gain this benefit until you are detected
"""
name = "Hide in Plain Sight"
source = "Revised Ranger"
# Beast Conclave
class AnimalCompanion(Feature):
"""At 3rd level, you learn to use your magic to create a powerful bond with a
creature of the natural world.
With 8 hours of work and the expenditure of 50 gp worth of rare herbs and
fine food, you call forth an animal from the wilderness to serve as your
faithful companion. You normally select you companion from among the
following animals: an ape, a black bear, a boar, a giant badger, a giant
weasel, a mule, a panther, or a wolf. However, your DM might pick one of
these animals for you, based on the surrounding terrain and on what types
of creatures would logically be present in the area.
At the end of the 8 hours, your animal companion appears and gains all the
benefits of your Companion's Bond ability. You can have only one animal
companion at a time.
If your animal companion is ever slain, the magical bond you share allows
you to return it to life. With 8 hours of work and the expenditure of 25 gp
worth of rare herbs and fine food, you call forth your companion's spirit
and use your magic to create a new body for it. You can return an animal
companion to life in this manner even if you do not possess any part of its
body.
If you use this ability to return a former animal companion to life while
you have a current animal companion, your current companion leaves you and
is replaced by the restored companion
"""
name = "Animal Companion"
source = "Revised Ranger (Animal Companion)"
class CompanionsBond(Feature):
"""Your animal companion gains a variety of benefits while it is linked to
you. The animal companion loses its Multiattack action, if it has one.
The companion obeys your commands as best it can. It rolls for initiative
like any other creature, but you determine its actions, decisions,
attitudes, and so on. If you are incapacitated or absent, your companion
acts on its own. When using your Natural Explorer feature, you and your
animal companion can both move stealthily at a normal pace.
Your animal companion has abilities and game statistics determined in part
by your level. Your companion uses your proficiency bonus rather than its
own. In addition to the areas where it normally uses its proficiency bonus,
an animal companion also adds its proficiency bonus to its AC and to its
damage rolls.
Your animal companion gains proficiency in two skills of your choice. It
also becomes proficient with all saving throws. For each level you gain
after 3rd, your animal companion gains an additional hit die and increases
its hit points accordingly. Whenever you gain the Ability Score Improvement
class feature, your companion's abilities also improve. Your companion can
increase one ability score of your choice by 2, or it can increase two
ability scores of your choice by 1. As normal, your companion can't
increase an ability score above 20 using this feature unless its
description specifies otherwise.
Your companion shares your alignment, and has a personality trait and a
flaw that you can roll for or select from the tables below. Your companion
shares your ideal, and its bond is always, \"The ranger who travels with me
is a beloved companion for whom I would gladly give my life.\"
"""
name = "Companions Bond"
source = "Revised Ranger (Beast Conclave)"
class CoordinatedAttack(Feature):
"""Beginning at 5th level, you and your animal companion form a more potent
fighting team. When you use the Attack action on your turn, if your
companion can see you, it can use its reaction to make a melee attack.
"""
name = "Coordinated Attack"
source = "Revised Ranger (Beast Conclave)"
class BeastsDefense(Feature):
"""At 7th level, while your companion can see you, it has advantage on all
saving throw
"""
name = "Beast's Defense"
source = "Revised Ranger (Beast Conclave)"
class StormOfClawsAndFangs(Feature):
"""At 11th level, your companion can use its action to make a melee attack
against each creature of its choice within 5 feet of it, with a separate
attack roll for each target
"""
name = "Storm of Claws and Fangs"
source = "Revised Ranger (Beast Conclave)"
class SuperiorBeastsDefense(Feature):
"""At 15th level, whenever an attacker that your companion can see hits it
with an attack, it can use its reaction to halve the attack's damage
against it.
"""
name = "Superior Beast's Defense"
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 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)"