Fixed remaining docstrings to be valid rst, and cleaned up TeX templates.

This commit is contained in:
Mark Wolfman
2021-04-15 22:31:14 -05:00
parent c8577187b0
commit 63c62a17f8
26 changed files with 416 additions and 498 deletions
+2 -1
View File
@@ -1,3 +1,5 @@
from dungeonsheets.features.features import Feature, create_feature, all_features
from dungeonsheets.features.artificer import *
from dungeonsheets.features.backgrounds import *
from dungeonsheets.features.barbarian import *
@@ -5,7 +7,6 @@ from dungeonsheets.features.bard import *
from dungeonsheets.features.cleric import *
from dungeonsheets.features.druid import *
from dungeonsheets.features.feats import *
from dungeonsheets.features.features import Feature, create_feature
from dungeonsheets.features.fighter import *
from dungeonsheets.features.monk import *
from dungeonsheets.features.paladin import *
+24 -23
View File
@@ -378,18 +378,18 @@ class AlchemicalSavant(Feature):
class RestorativeReagents(Feature):
"""Starting at 9th level, you can incorporate
restorative reagents into some of your works:
- Whenever a creature drinks an experimental elixir you created, the
creature gains temporary hit points equal to 2d6 + your Intelligence
modifier (minimum of 1 temporary hit point).
- You can cast lesser restoration without expending a spell slot and
without preparing the spell, provided you use alchemist's supplies as the
spellcasting focus. You can do so a number of times equal to your
Intelligence modifier (minimum of once), and you regain all expended uses
when you finish a long rest.
"""Starting at 9th level, you can incorporate restorative reagents
into some of your works:
- Whenever a creature drinks an experimental elixir you created,
the creature gains temporary hit points equal to 2d6 + your
Intelligence modifier (minimum of 1 temporary hit point).
- You can cast lesser restoration without expending a spell slot
and without preparing the spell, provided you use alchemist's
supplies as the spellcasting focus. You can do so a number of
times equal to your Intelligence modifier (minimum of once), and
you regain all expended uses when you finish a long rest.
"""
name = "Restorative Reagents"
source = "Artificer (Alchemist)"
@@ -397,17 +397,18 @@ class RestorativeReagents(Feature):
class ChemicalMastery(Feature):
"""By 15th level, you have been exposed to so many chemicals that they
pose little risk to you, and you can use them to quickly end certain
ailments:
- You gain resistance to acid damage and poison damage, and you are immune
to the poisoned condition.
- You can cast greater restoration and heal without expending a spell
slot, without preparing the spell, and without material components,
provided you use alchemist's supplies as the spellcasting focus. Once
you cast either spell with this feature, you can't cast that spell with
it again until you finish a long rest.
pose little risk to you, and you can use them to quickly end
certain ailments:
- You gain resistance to acid damage and poison damage, and you
are immune to the poisoned condition.
- You can cast greater restoration and heal without expending a
spell slot, without preparing the spell, and without material
components, provided you use alchemist's supplies as the
spellcasting focus. Once you cast either spell with this
feature, you can't cast that spell with it again until you
finish a long rest.
"""
name = "Chemical Mastery"
source = "Artificer (Alchemist)"
+13 -14
View File
@@ -672,25 +672,24 @@ class SoulOfTheForge(Feature):
class DivineStrikeForge(DivineStrike):
"""At 8th level, you gain the ability to infuse your weapon strikes with the
fiery power of the forge. Once on each ofyour turns when you hit a creature
with a weapon attack, you can cause the attack to deal an extra 1d8 fire
damage to the target. When you reach 14th level, the extra damage
increases to 2d8
"""At 8th level, you gain the ability to infuse your weapon strikes
with the fiery power of the forge. Once on each ofyour turns when
you hit a creature with a weapon attack, you can cause the attack
to deal an extra 1d8 fire damage to the target. When you reach
14th level, the extra damage increases to 2d8
"""
source = "Cleric (Forge Domain)"
class SaintOfForgeAndFire(Feature):
"""At 17th level, your blessed affinity with fire and metal becomes more
powerful:
You gain immunity to fire damage.
• While wearing heavy armor, you have resistance to bludgeoning, piercing,
and slashing damage from non-magical attacks
"""At 17th level, your blessed affinity with fire and metal becomes
more powerful:
- You gain immunity to fire damage.
- While wearing heavy armor, you have resistance to bludgeoning,
piercing, and slashing damage from non-magical attacks
"""
name = "Saint of Forge and Fire"
source = "Cleric (Forge Domain)"
+62 -59
View File
@@ -528,57 +528,60 @@ class SpeechOfTheWoods(Feature):
class SpiritTotem(Feature):
"""Starting at 2nd level, you can call forth nature spirits to influence the
world around you. As a bonus action, you can magically summon an
incorporeal spirit to a point you can see within 60 feet of you. The spirit
creates an aura in a 30-foot radius around that point. It counts as neither
a creature nor an object, though it has the spectral appearance of the
creature it. represents.
As a bonus action, you can move the spirit up to 60 feet to a point you can
see. The spirit persists for 1 minute or until you're incapacitated. Once
you use this feature, you can't use it again until you finish a short or
long rest. The effect of the spirit's aura depends on the type of spirit
you summon from the options below.
**Bear Spirit**: The bear spirit grants you and your allies its might and
endurance. Each creature ofyour choice in the aura when the spirit appears
gains temporary hit points equal to 5 + your druid level. In addition, you
and your allies gain advantage on Strength checks and Strength saving
throws while in the aura.
**Hawk Spirit**: The hawk spirit is a consummate hunter, aiding you and
your allies with its keen sight. When a creature makes an attack roll
against a target in the spirit's aura, you can use your reaction to grant
advantage to that attack roll. In addition, you and your allies have
advantage on Wisdom (Perception) checks while in the aura
**Unicorn Spirit**: The unicorn spirit lends its protection to those
nearby. You and your allies gain advantage on all ability checks made to
detect creatures in the spirit's aura. In addition. if you cast a spell
using a spell slot that restores hit points to any creature inside or
outside the aura, each creature of your choice in the aura also regains hit
points equal to your druid level.
"""Starting at 2nd level, you can call forth nature spirits to
influence the world around you. As a bonus action, you can
magically summon an incorporeal spirit to a point you can see
within 60 feet of you. The spirit creates an aura in a 30-foot
radius around that point. It counts as neither a creature nor an
object, though it has the spectral appearance of the creature
it. represents.
As a bonus action, you can move the spirit up to 60 feet to a
point you can see. The spirit persists for 1 minute or until
you're incapacitated. Once you use this feature, you can't use it
again until you finish a short or long rest. The effect of the
spirit's aura depends on the type of spirit you summon from the
options below.
**Bear Spirit**: The bear spirit grants you and your allies its
might and endurance. Each creature ofyour choice in the aura when
the spirit appears gains temporary hit points equal to 5 + your
druid level. In addition, you and your allies gain advantage on
Strength checks and Strength saving throws while in the aura.
**Hawk Spirit**: The hawk spirit is a consummate hunter, aiding
you and your allies with its keen sight. When a creature makes an
attack roll against a target in the spirit's aura, you can use
your reaction to grant advantage to that attack roll. In addition,
you and your allies have advantage on Wisdom (Perception) checks
while in the aura
**Unicorn Spirit**: The unicorn spirit lends its protection to
those nearby. You and your allies gain advantage on all ability
checks made to detect creatures in the spirit's aura. In
addition. if you cast a spell using a spell slot that restores hit
points to any creature inside or outside the aura, each creature
of your choice in the aura also regains hit points equal to your
druid level.
"""
name = "Spirit Totem"
source = "Druid (Circle of the Shepherd)"
class MightySummoner(Feature):
"""Starting at 6th level, beasts and fey that you conjure are more resilient
than normal. Any beast or fey summoned or created by a spell that you cast
gains the. following benefits:
- The creature appears with more hit points than normal: 2 extra hit
- The creature appears with more hit points than normal: 2 extra hit
points per Hit Die it has.
- The damage from its natural weapons is considered magical for the
purpose of overcoming immunity and resistance to nonmagical attacks and
damage.
"""Starting at 6th level, beasts and fey that you conjure are more
resilient than normal. Any beast or fey summoned or created by a
spell that you cast gains the. following benefits:
- The creature appears with more hit points than normal: 2 extra
hit
- The creature appears with more hit points than normal: 2 extra
hit points per Hit Die it has.
- The damage from its natural weapons is considered magical for
the purpose of overcoming immunity and resistance to nonmagical
attacks and damage.
"""
name = "Mighty Summoner"
source = "Druid (Circle of the Shepherd)"
@@ -590,7 +593,7 @@ class GuardianSpirit(Feature):
that you summoned or created with a spell ends its turn in your
Spirit Totem aura, that creature regains a number of hit points
equal to half your druid level.
"""
name = "Guardian Spirit"
source = "Druid (Circle of the Shepherd)"
@@ -652,19 +655,19 @@ class SymbioticEntity(Feature):
class FungalInfestation(Feature):
"""At 6th level, your spores gain the ability to infest a corpse and
animate it. If a beast or a humanoid that ist Small or Medium dies within
10 feet of you, you can use your reaction to animate it, causing it to
stand up immediately with 1 hit point. The creature uses the zombie stat
block in the _Monster Manual_. It remains animate for 1 hour, after which
time it collapses and dies.
In combat, the zombie's turn comes immediately after yours. It obeys your
mental commands, and the only action it can take is the Attack action,
making one melee attack.
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.
animate it. If a beast or a humanoid that is Small or Medium dies
within 10 feet of you, you can use your reaction to animate it,
causing it to stand up immediately with 1 hit point. The creature
uses the zombie stat block in the Monster Manual. It remains
animated for 1 hour, after which time it collapses and dies.
In combat, the zombie's turn comes immediately after yours. It
obeys your mental commands, and the only action it can take is the
Attack action, making one melee attack.
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 = "Fungal Infestation"
+9 -1
View File
@@ -1,4 +1,12 @@
from dungeonsheets import weapons
from dungeonsheets import weapons, features
def all_features():
"""Generate all the valid features classes so far defined."""
for feature_name, feature in features.__dict__.items():
# Check if it's (a) a class and (b) a subclass of ``Features``
if isinstance(feature, type) and issubclass(feature, Feature):
yield feature
def create_feature(**params):
+14 -18
View File
@@ -124,7 +124,7 @@ class FighterFightingStyle(FeatureSelector):
- thrown weapon fighting
- tunnel fighter
- unarmed fighting
"""
options = {'archery': Archery,
'defense': Defense,
@@ -334,24 +334,20 @@ class StudentOfWar(Feature):
class KnowYourEnemy(Feature):
"""Starting at 7th level, if you spend at least 1 minute observing or
interacting with another creature outside combat, you can learn certain
information about its capabilities 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:
interacting with another creature outside combat, you can learn
certain information about its capabilities 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:
- Strength score
- Dexterity score
- Constitution score
- Armor Class
- Current hit points
- Total class levels (if any)
- Fighter class levels (if any)
--Strength score
--Dexterity score
--Constitution score
--Armor Class
--Current hit points
--Total class levels (if any)
--Fighter class levels (if any)
"""
name = "Know Your Enemy"
source = "Fighter (Battle Master)"
+3 -2
View File
@@ -448,8 +448,9 @@ class DiscipleOfTheElements(Feature):
class ElementalAttunement(Feature):
"""You can use your action to briefly control elemental forces nearby, causing
one of the following effects of your choice:
"""You can use your action to briefly control elemental forces nearby,
causing one of the following effects of your choice:
- Create a harmless, instantaneous sensory effect related to air,
earth, fire, or water, such as a shower of sparks, a puff of
wind, a spray o f light mist, or a gentle rumbling of stone.
+16 -23
View File
@@ -189,29 +189,22 @@ class DraconicAncestry(Feature):
"""You have draconic ancestry. Choose one type of dragon from the Draconic
Ancestry table. Your breath weapon and damage resistance are determined by the
dragon type.
Dragon • Damage Type • Breath Weapon
Black • Acid • 5 by 30 ft. line (DEX save)
Blue Lightning 5 by 30 ft. line (DEX save)
Brass • Fire • 5 by 30 ft. line (DEX save)
Bronze • Lightning • 5 by 30 ft. line (DEX save)
Copper • Acid • 5 by 30 ft. line (DEX save)
Gold • Fire • 15 ft. cone (DEX save)
Green • Poison • 15 ft. cone (CON save)
Red • Fire • 15 ft. cone (DEX save)
Silver • Cold • 15 ft. cone (CON save)
White • White • 15 ft. cone (CON save)
====== =========== ===========================
Dragon Damage Type Breath Weapon
====== =========== ===========================
Black Acid 5 by 30 ft. line (DEX save)
Blue Lightning 5 by 30 ft. line (DEX save)
Brass Fire 5 by 30 ft. line (DEX save)
Bronze Lightning 5 by 30 ft. line (DEX save)
Copper Acid 5 by 30 ft. line (DEX save)
Gold Fire 15 ft. cone (DEX save)
Green Poison 15 ft. cone (CON save)
Red Fire 15 ft. cone (DEX save)
Silver Cold 15 ft. cone (CON save)
White White 15 ft. cone (CON save)
====== =========== ===========================
"""
name = "Draconic Ancestry"
source = "Race (Dragonborn)"
+25 -27
View File
@@ -644,33 +644,31 @@ class FavoredEnemyRevised(Feature):
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.
"""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"
+17 -16
View File
@@ -236,22 +236,23 @@ class DeathStrike(Feature):
# 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.
"""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)"
+6 -6
View File
@@ -347,12 +347,12 @@ class UndyingNature(Feature):
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.
"""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"
+32 -34
View File
@@ -452,17 +452,17 @@ class GrimHarvest(Feature):
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
"""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)"
@@ -595,29 +595,27 @@ class MasterTransmuter(Feature):
# 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.
"""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 following 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)"
@@ -1,16 +1,5 @@
\documentclass[twocolumn,lettersize]{article}
\newlength{\zerosep}
[% if use_dnd_decorations %]
\usepackage[layout=true]{dnd}
\setlength{\zerosep}{0em}
[% else %]
\usepackage[margin=1.5cm]{geometry}
\setlength{\zerosep}{-1em}
\usepackage[dvipsnames]{color}
[% endif %]
\definecolor{mygrey}{gray}{0.7}
[% include 'preamble.tex' %]
\title{Wild Shapes}
@@ -18,34 +7,8 @@
\author{[[ character.name ]]}
%%% Fallback definitions for Docutils-specific commands
[% raw %]
% admonition (specially marked topic)
\providecommand{\DUadmonition}[2][class-arg]{%
% try \DUadmonition#1{#2}:
\ifcsname DUadmonition#1\endcsname%
\csname DUadmonition#1\endcsname{#2}%
\else
\begin{center}
\fbox{\parbox{0.9\linewidth}{#2}}
\end{center}
\fi
}
% title for topics, admonitions, unsupported section levels, and sidebar
\providecommand*{\DUtitle}[2][class-arg]{%
% call \DUtitle#1{#2} if it exists:
\ifcsname DUtitle#1\endcsname%
\csname DUtitle#1\endcsname{#2}%
\else
\smallskip\noindent\textbf{#2}\smallskip%
\fi
}
[% endraw %]
\begin{document}
\twocolumn[
\begin{@twocolumnfalse}
\maketitle
@@ -57,7 +20,6 @@
\end{@twocolumnfalse}
]
[% for shape in character.all_wild_shapes|sort(attribute='challenge_rating') %]
[% if not character.can_assume_shape(shape) %]
{\color{mygrey}
-39
View File
@@ -1,50 +1,11 @@
\documentclass[10pt,twocolumn,lettersize]{article}
\newlength{\zerosep}
[% if use_dnd_decorations %]
\usepackage[layout=true]{dnd}
\setlength{\zerosep}{0em}
[% else %]
\usepackage[margin=1.5cm]{geometry}
\usepackage[dvipsnames]{color}
\definecolor{mygrey}{gray}{0.7}
\setlength{\zerosep}{-1em}
[% endif %]
[% include 'preamble.tex' %]
\title{Features and Magic Items}
\author{[[ character.name ]]}
\date{}
%%% Fallback definitions for Docutils-specific commands
[% raw %]
\usepackage{longtable,ltcaption,array}
\setlength{\extrarowheight}{2pt}
\newlength{\DUtablewidth} % internal use in tables
% admonition (specially marked topic)
\providecommand{\DUadmonition}[2][class-arg]{%
% try \DUadmonition#1{#2}:
\ifcsname DUadmonition#1\endcsname%
\csname DUadmonition#1\endcsname{#2}%
\else
\begin{center}
\fbox{\parbox{0.9\linewidth}{#2}}
\end{center}
\fi
}
% title for topics, admonitions, unsupported section levels, and sidebar
\providecommand*{\DUtitle}[2][class-arg]{%
% call \DUtitle#1{#2} if it exists:
\ifcsname DUtitle#1\endcsname%
\csname DUtitle#1\endcsname{#2}%
\else
\smallskip\noindent\textbf{#2}\smallskip%
\fi
}
[% endraw %]
\begin{document}
\maketitle
@@ -1,45 +1,11 @@
\documentclass[10pt,twocolumn,lettersize]{article}
\newlength{\zerosep}
[% if use_dnd_decorations %]
\usepackage[layout=true]{dnd}
\setlength{\zerosep}{0em}
[% else %]
\usepackage[margin=1.5cm]{geometry}
\setlength{\zerosep}{-1em}
[% endif %]
[% include 'preamble.tex' %]
\title{Infusion Descriptions}
\author{[[ character.name ]] (Artificer [[ character.Artificer.level ]] level)}
\date{}
%%% Fallback definitions for Docutils-specific commands
[% raw %]
% admonition (specially marked topic)
\providecommand{\DUadmonition}[2][class-arg]{%
% try \DUadmonition#1{#2}:
\ifcsname DUadmonition#1\endcsname%
\csname DUadmonition#1\endcsname{#2}%
\else
\begin{center}
\fbox{\parbox{0.9\linewidth}{#2}}
\end{center}
\fi
}
% title for topics, admonitions, unsupported section levels, and sidebar
\providecommand*{\DUtitle}[2][class-arg]{%
% call \DUtitle#1{#2} if it exists:
\ifcsname DUtitle#1\endcsname%
\csname DUtitle#1\endcsname{#2}%
\else
\smallskip\noindent\textbf{#2}\smallskip%
\fi
}
[% endraw %]
\begin{document}
\maketitle
+43
View File
@@ -4,3 +4,46 @@
\usepackage{alltt}
\usepackage{supertabular}
% Make lists more compact
\usepackage{enumitem}
\setlist{noitemsep}
\newlength{\zerosep}
[% if use_dnd_decorations %]
\usepackage[layout=true]{dnd}
\setlength{\zerosep}{0em}
[% else %]
\usepackage[margin=1.5cm]{geometry}
\usepackage[dvipsnames]{color}
\setlength{\zerosep}{-1em}
[% endif %]
\definecolor{mygrey}{gray}{0.7}
%%% Fallback definitions for Docutils-specific commands
[% raw %]
\usepackage{longtable,ltcaption,array}
\setlength{\extrarowheight}{2pt}
\newlength{\DUtablewidth} % internal use in tables
% admonition (specially marked topic)
\providecommand{\DUadmonition}[2][class-arg]{%
% try \DUadmonition#1{#2}:
\ifcsname DUadmonition#1\endcsname%
\csname DUadmonition#1\endcsname{#2}%
\else
\begin{center}
\fbox{\parbox{0.9\linewidth}{#2}}
\end{center}
\fi
}
% title for topics, admonitions, unsupported section levels, and sidebar
\providecommand*{\DUtitle}[2][class-arg]{%
% call \DUtitle#1{#2} if it exists:
\ifcsname DUtitle#1\endcsname%
\csname DUtitle#1\endcsname{#2}%
\else
\smallskip\noindent\textbf{#2}\smallskip%
\fi
}
[% endraw %]
+1 -38
View File
@@ -1,48 +1,11 @@
\documentclass[10pt,twocolumn,lettersize]{article}
\newlength{\zerosep}
[% if use_dnd_decorations %]
\usepackage[layout=true]{dnd}
\setlength{\zerosep}{0em}
[% else %]
\usepackage[margin=1.5cm]{geometry}
\usepackage[dvipsnames]{color}
\definecolor{mygrey}{gray}{0.7}
\setlength{\zerosep}{-1em}
[% endif %]
[% include 'preamble.tex' %]
\title{Spell Descriptions}
\author{[[ character.name ]]}
\date{}
%%% Fallback definitions for Docutils-specific commands
[% raw %]
% admonition (specially marked topic)
\providecommand{\DUadmonition}[2][class-arg]{%
% try \DUadmonition#1{#2}:
\ifcsname DUadmonition#1\endcsname%
\csname DUadmonition#1\endcsname{#2}%
\else
\begin{center}
\fbox{\parbox{0.9\linewidth}{#2}}
\end{center}
\fi
}
% title for topics, admonitions, unsupported section levels, and sidebar
\providecommand*{\DUtitle}[2][class-arg]{%
% call \DUtitle#1{#2} if it exists:
\ifcsname DUtitle#1\endcsname%
\csname DUtitle#1\endcsname{#2}%
\else
\smallskip\noindent\textbf{#2}\smallskip%
\fi
}
[% endraw %]
\begin{document}
\maketitle
@@ -73,7 +36,7 @@
\item [Range:] [[ spl.casting_range ]] \\
\item [Components:] [[ spl.component_string ]]
\end{description}
\vspace{\zerosep}
% \vspace{\zerosep}
[[ spl.__doc__ | rst_to_latex(top_heading_level=1) ]]
+31 -24
View File
@@ -439,20 +439,24 @@ class InvestitureOfFlame(Spell):
class InvestitureOfIce(Spell):
"""Until the spell ends, ice rimes your body, and you gain the following benefits:
- You are immune to cold damage and have resistance to fire damage.
- You can
move across difficult terrain created by ice or snow without spending extra
movement.
- The ground in a 10-foot radius around you is icy and is difficult
terrain for creatures other than you. The radius moves with you.
- You can use
your action to create a 15-foot cone of freezing wind extending from your
outstretched hand in a direction you choose. Each creature in the cone must make
a Constitution saving throw. A creature takes 4d6 cold damage on a failed save,
or half as much damage on a successful one. A creature that fails its save
against this effect has its speed halved until the start of your next turn.
"""Until the spell ends, ice rimes your body, and you gain the
following benefits:
- You are immune to cold damage and have resistance to fire
damage.
- You can move across difficult terrain created by ice or snow
without spending extra movement.
- The ground in a 10-foot radius around you is icy and is
difficult terrain for creatures other than you. The radius moves
with you.
- You can use your action to create a 15-foot cone of freezing
wind extending from your outstretched hand in a direction you
choose. Each creature in the cone must make a Constitution
saving throw. A creature takes 4d6 cold damage on a failed save,
or half as much damage on a successful one. A creature that
fails its save against this effect has its speed halved until
the start of your next turn.
"""
name = "Investiture Of Ice"
level = 6
@@ -469,17 +473,20 @@ class InvestitureOfIce(Spell):
class InvestitureOfStone(Spell):
"""Until the spell ends, bits of rock spread across your body, and you gain the
following benefits:
- You have resistance to bludgeoning, piercing, and slashing
damage from nonmagical weapons.
- You can use your action to create a small
earthquake on the ground in a 15-foot radius centered on you. Other creatures on
that ground must succeed on a Dexterity saving throw or be knocked prone.
- You
can move across difficult terrain made of earth or stone without spending extra
movement. You can move through solid earth or stone as if it was air and
without destabilizing it, but you can't end your movement there. If you do so,
you are ejected to the nearest unoccupied space, this spell ends, and you are
stunned until the end of your next turn.
damage from nonmagical weapons.
- You can use your action to create a small earthquake on the
ground in a 15-foot radius centered on you. Other creatures on
that ground must succeed on a Dexterity saving throw or be
knocked prone.
- You can move across difficult terrain made of earth or stone
without spending extra movement. You can move through solid
earth or stone as if it was air and without destabilizing it,
but you can't end your movement there. If you do so, you are
ejected to the nearest unoccupied space, this spell ends, and
you are stunned until the end of your next turn.
"""
name = "Investiture Of Stone"
level = 6
+41 -40
View File
@@ -93,28 +93,29 @@ class MagicCircle(Spell):
"""You create a 10-foot-radius, 20-foot-tall cylinder of magical energy centered on
a point on the ground that you can see within range. Glowing runes appear
wherever the cylinder intersects with the floor or other surface.
Choose one or
more of the following types of creatures: celestials, elementals, fey, fiends,
or undead. The circle affects a creature of the chosen type in the following
ways:
* The creature can't willingly enter the cylinder by nonmagical means. If
the creature tries to use teleportation or interplanar travel to do so, it must
first succeed on a Charisma saving throw.
* The creature has disadvantage on
attack rolls against targets within the cylinder.
* Targets within the cylinder
can't be charmed, frightened, or possessed by the creature.
When you cast this
spell, you can elect to cause its magic to operate in the reverse direction,
preventing a creature of the specified type from leaving the cylinder and
protecting targets outside it.
**At Higher Levels:** When you cast this spell using
a spell slot of 4th level or higher, the duration increases by 1 hour for each
Choose one or more of the following types of creatures:
celestials, elementals, fey, fiends, or undead. The circle affects
a creature of the chosen type in the following ways:
- The creature can't willingly enter the cylinder by nonmagical
means. If the creature tries to use teleportation or interplanar
travel to do so, it must first succeed on a Charisma saving
throw.
- The creature has disadvantage on attack rolls against targets
within the cylinder.
- Targets within the cylinder can't be charmed, frightened, or
possessed by the creature.
When you cast this spell, you can elect to cause its magic to
operate in the reverse direction, preventing a creature of the
specified type from leaving the cylinder and protecting targets
outside it.
**At Higher Levels:** When you cast this spell using a spell slot
of 4th level or higher, the duration increases by 1 hour for each
slot level above 3rd.
"""
name = "Magic Circle"
level = 3
@@ -1055,27 +1056,27 @@ class MoldEarth(Spell):
class Moonbeam(Spell):
"""A silvery beam of pale light shines down in a 5-footradius, 40-foot-high
cylinder centered on a point within range. Until the spell ends, dim light fills
the cylinder.
"""A silvery beam of pale light shines down in a 5-footradius,
40-foot-high cylinder centered on a point within range. Until the
spell ends, dim light fills the cylinder.
When a creature enters the spell's area for the first time on a
turn or starts its turn there, it is engulfed in ghostly flames that cause
searing pain, and it must make a Constitution saving throw. It takes 2d10
radiant damage on a failed save, or half as much damage on a successful one.
turn or starts its turn there, it is engulfed in ghostly flames
that cause searing pain, and it must make a Constitution saving
throw. It takes 2d10 radiant damage on a failed save, or half as
much damage on a successful one.
A shapechanger makes its saving throw with disadvantage. If it
fails, it also instantly reverts to its original form and can't
assume a different form until it leaves the spell's light.
On each of your turns after you cast this spell, you can use an
action to move the beam 60 feet in any direction.
**At Higher Levels:** When you cast this spell using aspell slot
of 3rd level or higher, the damage increases by 1d10 for each slot
level above 2nd.
A
shapechanger makes its saving throw with disadvantage. If it fails, it also
instantly reverts to its original form and can't assume a different form until
it leaves the spell's light.
On each of your turns after you cast this spell,
you can use an action to move the beam 60 feet in any direction.
At Higher
Levels: When you cast this spell using aspell slot of 3rd level or higher, the
damage increases by 1d1O for each slot level above 2nd.
"""
name = "Moonbeam"
level = 2
+12 -11
View File
@@ -95,17 +95,18 @@ class PhantasmalForce(Spell):
class PhantasmalKiller(Spell):
"""You tap into the nightmares of a creature you can see within range and create an
illusory manifestation of its deepest fears, visible only to that creature.
The
target must make a Wisdom saving throw. On a failed save, the target becomes
frightened for the duration. At the end of each of the target's turns before the
spell ends, the target must succeed on a Wisdom saving throw or take 4d10
psychic damage. On a successful save, the spell ends.
**At Higher Levels:** When
you cast this spell using a spell slot of 5th level or higher, the damage
increases by 1d1O for each slot level above 4th.
"""You tap into the nightmares of a creature you can see within range
and create an illusory manifestation of its deepest fears, visible
only to that creature. The target must make a Wisdom saving
throw. On a failed save, the target becomes frightened for the
duration. At the end of each of the target's turns before the
spell ends, the target must succeed on a Wisdom saving throw or
take 4d10 psychic damage. On a successful save, the spell ends.
**At Higher Levels:** When you cast this spell using a spell slot
of 5th level or higher, the damage increases by 1d10 for each slot
level above 4th.
"""
name = "Phantasmal Killer"
level = 4
+24 -28
View File
@@ -93,17 +93,15 @@ class Scrying(Spell):
and the sort of physical connection you have to it. If a target
knows you're casting this spell, it can fail the saving throw
voluntarily if it wants to be observed.
Knowledge - Save Modifier
-------------------------
**Knowledge - Save Modifier**
- Secondhand (you have heard of the target) - +5
- Firsthand (you have met the target) - +0
- Familiar (you know the target well) - -5
Connection - Save Modifier
--------------------------
**Connection - Save Modifier**
- Likeness or picture - -2
- Possession or garment - -4
- Body part, lock of hair, bit of nail, or the like - -10
@@ -325,27 +323,25 @@ class ShadowOfMoil(Spell):
class ShapeWater(Spell):
"""You choose an area of water that you can see within range and that fits within a
5-foot cube.
You manipulate it in one of the following ways:
- You
instantaneously move or otherwise change the flow of the water as you direct, up
to 5 feet in any direction. This movement doesn't have enough force to cause
damage.
- You cause the water to form into simple shapes and animate at your
direction. This change lasts for 1 hour.
- You change the water's color or
opacity. The water must be changed in the same way throughout. This change lasts
for 1 hour.
"""You choose an area of water that you can see within range and that
fits within a 5-foot cube. You manipulate it in one of the
following ways:
- You instantaneously move or otherwise change the flow of the
water as you direct, up to 5 feet in any direction. This
movement doesn't have enough force to cause damage.
- You cause the water to form into simple shapes and animate at
your direction. This change lasts for 1 hour.
- You change the water's color or opacity. The water must be
changed in the same way throughout. This change lasts for 1
hour.
- You freeze the water, provided that there are no crea- tures in
it. The water unfreezes in 1 hour.
If you cast this spell multiple times, you
can have no more than two of its non-instantaneous effects active at a time, and
you can dismiss such an effect as an action.
it. The water unfreezes in 1 hour.
If you cast this spell multiple times, you can have no more than
two of its non-instantaneous effects active at a time, and you can
dismiss such an effect as an action.
"""
name = "Shape Water"
level = 0
+12 -13
View File
@@ -99,21 +99,22 @@ class Telepathy(Spell):
class Teleport(Spell):
"""This spell instantly transports you and up to eight willing creatures of your
choice that you can see within range, or a single object that you can see within
range, to a destination you select. If you target an object, it must be able to
fit entirely inside a 10-foot cube, and it can't be held or carried by an
"""This spell instantly transports you and up to eight willing
creatures of your choice that you can see within range, or a
single object that you can see within range, to a destination you
select. If you target an object, it must be able to fit entirely
inside a 10-foot cube, and it can't be held or carried by an
unwilling creature.
The destination you choose must be known to you, and it
must be on the same plane of existence as you. Your familiarity with the
destination determines whether you arrive there successfully. The DM rolls d100
and consults the table.
The destination you choose must be known to you, and it must be on
the same plane of existence as you. Your familiarity with the
destination determines whether you arrive there successfully. The
DM rolls d100 and consults the table.
================= ====== ============ ========== =========
Familiarity Mishap Similar Area Off Target On Target
================= ====== ============ ========== =========
Permanent circle -- -- -- 01-100
Permanent circle -- -- -- 01-100
Associated object -- -- -- 01-100
Very familiar 0105 0613 1424 25100
Seen casually 0133 3443 4453 54100
@@ -852,5 +853,3 @@ class Tsunami(Spell):
ritual = False
magic_school = "Conjuration"
classes = ('Druid',)
+6 -5
View File
@@ -311,17 +311,18 @@ class WardingWind(Spell):
"""A strong wind (20 miles per hour) blows around you in a 10-foot
radius and moves with you, remaining centered on you. The wind
lasts for the spell's duration.
The wind has the following effects:
- It deafens you and other creatures in its area.
- It extinguishes unprotected flames in its area that are
torch-sized or smaller.
torch-sized or smaller.
- The area is difficult terrain for creatures other than you.
- The attack rolls of ranged weapon attacks have disadvantage if
they pass in or out of the wind.
they pass in or out of the wind.
- It hedges out vapor, gas, and fog that can be dispersed by
strong wind.
strong wind.
"""
name = "Warding Wind"
level = 2
+13 -1
View File
@@ -2,11 +2,23 @@
from unittest import TestCase
from dungeonsheets.features import create_feature, Feature
from dungeonsheets import features
from dungeonsheets.features import create_feature, Feature, all_features
class TestFeatures(TestCase):
"""Tests for features and feature-related activities."""
def test_all_features(self):
# Make sure only features are returned
for ThisFeature in all_features():
self.assertTrue(isinstance(ThisFeature, type),
f"``all_features`` returned {ThisFeature} (not a class)")
self.assertTrue(issubclass(ThisFeature, Feature),
f"``all_features`` returned {ThisFeature} (not a feature)")
# Pick a couple of known features to spot-check for
all_the_features = list(all_features())
self.assertIn(features.FalseIdentity, all_the_features)
self.assertIn(features.DivineSmite, all_the_features)
def test_create_feature(self):
NewFeature = create_feature(name="Hello world")
+9 -2
View File
@@ -3,7 +3,7 @@ import os
from pathlib import Path
import subprocess
from dungeonsheets import make_sheets, character, spells
from dungeonsheets import make_sheets, character, spells, features
EG_DIR = os.path.abspath(os.path.join(os.path.split(__file__)[0], '../examples/'))
CHARFILE = os.path.join(EG_DIR, 'rogue1.py')
@@ -136,9 +136,16 @@ class MarkdownTestCase(unittest.TestCase):
self.assertNotIn("endfoot", tex)
self.assertNotIn("endhead", tex)
self.assertNotIn("endfirsthead", tex)
def test_rst_all_spells(self):
for spell in spells.all_spells():
tex = make_sheets.rst_to_latex(spell.__doc__)
self.assertNotIn("DUadmonition", tex,
f"spell {spell} is not valid reStructured text")
def test_rst_all_features(self):
for feature in features.all_features():
tex = make_sheets.rst_to_latex(feature.__doc__)
self.assertNotIn("DUadmonition", tex,
f"feature {feature} is not valid reStructured text")
+1 -1
View File
@@ -26,7 +26,7 @@ class TestSpells(TestCase):
self.assertEqual(NewSpell.name, 'Hello world')
spell = NewSpell()
print(spell, spell.__class__, type(spell))
def test_spell_str(self):
spell = Spell()
spell.name = "My spell"