Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_spell_str(self):
spell = Spell()
spell.name = "My spell"
self.assertEqual(str(spell), 'My spell')
# Try with a ritual
spell.ritual = True
self.assertEqual(str(spell), 'My spell (R)')
# Try with a ritual and a concentration
spell.concentration = True
self.assertEqual(str(spell), 'My spell (R, C)')
a portal from the nonportal side has no effect. The mist that
fills each portal is opaque and blocks vision through it. On your
turn, you can rotate the rings as a bonus action so that the
active side faces in a different direction.
"""
level = 6
casting_time = "1 action"
casting_range = "500 ft"
components = ("V", "S")
duration = "Concentration, up to 10 minutes"
magic_school = "Conjuration"
classes = ('Sorceror', 'Warlock', 'Wizard')
class ArcaneLock(Spell):
"""You touch a closed door, window, gate, chest, or other entryway,
and it becomes locked for the duration. You and the creatures you
designate when you cast this spell can open the object
normally. You can also set a password that, when spoken within 5
feet of the object, suppresses this spell for 1 minute. Otherwise,
it is impassable until it is broken or the spell is dispelled or
suppressed. Casting knock on the object suppresses arcane lock for
10 minutes.
While affected by this spell, the object is more difficult to
break or force open; the DC to break it or pick any locks on it
increases by 10.
"""
level = 2
casting_time = "1 action"
"""
level = 2
casting_time = "1 minute"
casting_range = "Self"
components = ("V", "S", "M")
materials = "specially marked sticks, bones, or similar tokens worth at least 25 gp"
duration = "instantaneous"
magic_school = "Divination"
classes = ('Cleric', )
class BlindnessDeafness(Spell):
"""You can blind or deafen a foe. Choose one creature that you can see
within range to make a Constitution saving throw. If it fails, the
target is either blinded or deafened (your choice) for the
duration. At the end of each of its turns, the target can make a
Constitution saving throw. On a success, the spell ends.
At Higher Levels. When you cast this spell using a spell slot of
3rd level or higher, you can target one additional creature for
each slot level above 2nd.
"""
name = "Blindness/Deafness"
magic_school = "Necromancy"
level = 2
casting_range = "30 feet"
2nd level or higher, you gain 5 additional temporary hit points
for each slot level above 1st.
"""
name = "False Life"
level = 1
casting_time = "1 action"
casting_range = "Self (30 feet)"
components = ("V", "S", "M")
materials = "A small amount of alcohol or distilled spirits"
duration = "1 hour"
magic_school = "Necromancy"
classes = ('Sorceror', 'Wizard', )
class MageArmor(Spell):
"""You touch a willing creature who isn't wearing armor, and a
protective magical force surrounds it until the spell ends. The
target's base AC becomes 13 + its Dexterity modifier. The spell
ends it if the target dons armor or if you dismiss the spell as an
action.
"""
name = "Mage Armor"
level = 1
casting_time = "1 action"
casting_range = "Touch"
components = ("V", "S", "M")
materials = "A piece of cured leather"
duration = "8 hours"
magic_school = "Abjuration"
classes = ('Sorceror', 'Wizard', )
If you are returned to your body prematurely, your companions
remain in their astral forms and must find their own way back to
their bodies, usually by dropping to 0 hit points.
"""
level = 9
casting_time = "1 hour"
casting_range = "10 ft"
components = ("V", "S", "M")
materials = "For each creature you affect with this spell, you must provide one jacinth worth at least 1000 GP and one ornately carved bar of silver worth at least 100 GP, all of which the spell consumes."
duration = "Special"
magic_school = "Necromancy"
classes = ('Necromancy', 'Cleric', 'Warlock', 'Wizard', 'Monk')
class Augury(Spell):
"""By casting gem-inlaid sticks, rolling dragon bones, laying out
ornate cards, or employing some other divining tool, you receive
an omen from an otherworldly entity about the results of a
specific course of action that you plan to take within the next 30
minutes. The DM chooses from the following possible omens:
- Weal, for good results
- Woe, for bad results
- Weal and woe, for both good and bad results
- Nothing, for results that aren’t especially good or bad
The spell doesn’t take into account any possible circumstances
that might change the outcome, such as the casting of additional
spells or the loss or gain of a companion. If you cast the spell
two or more times before completing your next long rest, there is
a cumulative 25 percent chance for each casting after the first
The spell can penetrate most barriers, but is blocked by 1 foot of
stone, 1 inch of common metal, a thin sheet of lead, or 3 feet of
wood or dirt.
"""
name = "Detect Magic"
level = 1
casting_time = "1 action"
casting_range = "Self (30 feet)"
components = ("V", "S")
duration = "Concentration, Up to 10 minutes"
magic_school = "Divination"
classes = ('Bard', 'Cleric', 'Druid', 'Paladin', 'Ranger', 'Sorceror', 'Wizard', )
class FalseLife(Spell):
"""Bolstering yourself with a necromantic facsimile of life, you gain
1d4+4 temporary hit points for the duration.
At Higher Levels: When you cast this spell using a spell slot of
2nd level or higher, you gain 5 additional temporary hit points
for each slot level above 1st.
"""
name = "False Life"
level = 1
casting_time = "1 action"
casting_range = "Self (30 feet)"
components = ("V", "S", "M")
materials = "A small amount of alcohol or distilled spirits"
duration = "1 hour"
magic_school = "Necromancy"
by the nature of its new form, and it can’t speak or cast spells.
The target’s gear melds into the new form. The target can’t
activate, wield, or otherwise benefit from any of its equipment.
"""
level = 8
casting_time = "1 action"
casting_range = "30 ft"
components = ("V", "S")
duration = "Concentration, up to 24 hours"
magic_school = "Transmutation"
classes = ('Druid',)
class AnimateDead(Spell):
"""This spell creates an undead servant. Choose a pile of bones or a
corpse of a medium or small humanoid within range. Your spell
imbues the target with a foul mimicry of life, raising it as an
undead creature. The target becomes a skeleton if you chose bones
or a zombie if you chose a corpse (the DM has the creature’s game
statistics).
On each of your turns, you can use a bonus action to mentally
command any creature you made with this spell if the creature is
within 60 feet of you (if you control multiple creatures, you can
command any or all of them at the same time, issuing the same
command to each one). You decide what action the creature will
take and where it will move during its next turn, or you can issue
a general command, such as to guard a particular chamber or
corridor. If you issue no commands, the creature only defends
itself against hostile creatures. Once given an order, the
At Higher Levels. When you cast this spell using a spell slot of
2nd level or higher, the damage increases by 1d8 for each slot
level above 1st.
"""
name = "Ray of Sickness"
level = 1
casting_time = "1 action"
casting_range = "60 feet"
components = ("V", "S", )
duration = "Instantaneous"
magic_school = "Necromancy"
classes = ('Sorceror', 'Wizard', )
class Shield(Spell):
"""An invisible barrier of magical force appears and protects
you. Until the start of your next turn, you have a +5 bonus to AC,
including against the triggering attack, and you take no damage
from magic missile.
"""
name = "Shield"
level = 1
casting_time = "1 reaction"
casting_range = "Self"
components = ("V", "S", )
duration = "1 round"
magic_school = "Abjuration"
classes = ('Sorceror', 'Wizard', )
At Higher Levels: If you cast this spell using a spell slot of 3rd
level or higher, the duration of the spell increases by 48 hours
for each slot level above 2nd.
"""
level = 2
casting_time = "1 action"
casting_range = "30 ft"
components = ("V", "S", "M")
materials = "A morsel of food"
duration = "24 hours"
magic_school = "Enchantment"
classes = ('Bard', 'Druid', 'Ranger')
class AnimalShapes(Spell):
"""Your magic turns others into beasts. Choose any number of willing
creatures that you can see within range. You transform each target
into the form of a Large or smaller beast with a challenge rating
of 4 or lower. On subsequent turns, you can use your action to
transform affected creatures into new forms.
The transformation lasts for the duration for each target, or
until the target drops to 0 hit points or dies. You can choose a
different form for each target. A target’s game statistics are
replaced by the statistics of the chosen beast, though the target
retains its alignment and Intelligence, Wisdom and Charisma
scores. The target assumes the hit points of its new form, and
when it reverts to its normal form, it returns to the number of
hit points it had before it transformed. If it reverts as a result
of dropping to 0 hit points, any excess damage carries over to its
normal form. As long as the excess damage doesn't reduce the
While affected by this spell, the object is more difficult to
break or force open; the DC to break it or pick any locks on it
increases by 10.
"""
level = 2
casting_time = "1 action"
casting_range = "Touch"
components = ("V", "S", "M")
materials = "Gold dust worth at least 25 gp, which the spell consumes"
duration = "Until dispelled"
magic_school = "Abjuration"
classes = ('Wizard',)
class ArmorOfAgathys(Spell):
"""A protective magical force surrounds you, manifesting as a spectral
frost that covers you and your gear. You gain 5 temporary hit
points for the duration. If a creature hits you with a melee
attack while you have these hit points, the creature takes 5 cold
damage.
At Higher Levels: When you cast this spell using a spell slot of
2nd level or higher, both the temporary hit points and the cold
damage increase by 5 for each slot level above 1st.
"""
level = 1
casting_time = "1 action"
casting_range = "Self"
components = ("V", "S", "M")
materials = "A cup of water"