diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 0b1a680f..6329e25e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,15 +1,22 @@ -name: Docker +name: Deploy Docker image on: - push: - branches: [ "master" ] + workflow_run: + workflows: ["Python package"] + branches: ["master"] + types: + - completed + + workflow_dispatch: env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + VERSION: latest jobs: - build_publish: + build: + name: Build Docker image runs-on: ubuntu-latest permissions: contents: read @@ -29,7 +36,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Login against Container registry + - name: Login to container registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} @@ -42,7 +49,7 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - name: Build and push Docker image + - name: Build Docker image uses: docker/build-push-action@v5 with: context: . @@ -50,3 +57,70 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64, linux/arm64 + + test: + name: Test Docker image + needs: build + runs-on: ubuntu-latest + permissions: + contents: read + packages: read + strategy: + matrix: + build-command: ["", "--fancy --tex-template --feats-by-type --spells-by-level", "--output-format=epub"] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Login to container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Run Tests + run: | + docker run -v ${{ github.workspace }}/examples:/build ${{ steps.meta.outputs.tags }} ${{ matrix.build-command }} + + push: + name: Deploy Docker image + needs: [build, test] + if: ${{ github.ref == 'refs/heads/master' }} + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + + - name: Login to container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Pull Docker image from GHCR + run: docker pull ${{ steps.meta.outputs.tags }} + + - name: Lowercase reponame + run: echo "IMAGE_NAME_LC=${GITHUB_REPOSITORY@L}" >> "${GITHUB_ENV}" + + - name: Tag and push Docker image to GHCR (final) + run: | + docker tag ${{ steps.meta.outputs.tags }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }}:${{ env.VERSION }} + docker push ${{ steps.meta.outputs.tags }} + docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_LC }}:${{ env.VERSION }} diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml deleted file mode 100644 index c4a1b71b..00000000 --- a/.github/workflows/python-ci.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Python package - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - python-version: ['3.9', '3.10', '3.11', '3.12'] - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Set up required system dependencies - run: | - sudo apt-get update - sudo apt-get -y install pdftk texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - cache: pip - - name: Install dependencies and do a local pip install - run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" - - name: Run flake - run: flake8 dungeonsheets/ --exit-zero - - name: Run tests - run: > - cd examples/; - makesheets --debug; - makesheets --debug --fancy; - makesheets --debug --output-format=epub; - cd ../; - pytest --cov=dungeonsheets tests/ diff --git a/.github/workflows/python_ci.yml b/.github/workflows/python_ci.yml new file mode 100644 index 00000000..06d04b2d --- /dev/null +++ b/.github/workflows/python_ci.yml @@ -0,0 +1,84 @@ +name: Python package + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + name: "Run test suite" + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + python-version: ['3.9', '3.10', '3.11'] + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up required system dependencies + run: | + sudo apt-get update + sudo apt-get -y install pdftk texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra texlive-luatex texlive-pstricks + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: pip + + - name: Install dependencies and do a local pip install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Run flake + run: flake8 dungeonsheets/ --exit-zero + + - name: Run tests + run: pytest --cov=dungeonsheets tests/ + + render_examples: + name: "Test python-3.12, render all examples" + runs-on: ubuntu-latest + needs: [build] + strategy: + matrix: + build-command: ["", "--fancy --tex-template --spells-by-level --feats-by-type", "--output-format=epub"] + + steps: + - uses: actions/checkout@v4 + name: Checkout Repo + with: + submodules: recursive + + - name: Set up required system dependencies + run: | + sudo apt-get update + sudo apt-get -y install pdftk texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra texlive-luatex texlive-pstricks + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: 3.12 + cache: pip + + - name: Install dependencies and do a local pip install + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Run flake + run: flake8 dungeonsheets/ --exit-zero + + - name: Run tests + run: pytest --cov=dungeonsheets tests/ + + - name: Render examples with ${{ matrix.build-command }} + run: | + cd examples + makesheets --debug ${{ matrix.build-command }} diff --git a/.gitmodules b/.gitmodules index 5bd8ab31..807489d4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "dungeonsheets/modules/DND-5e-LaTeX-Template"] path = dungeonsheets/modules/DND-5e-LaTeX-Template url = https://github.com/rpgtex/DND-5e-LaTeX-Template.git +[submodule "dungeonsheets/modules/DND-5e-LaTeX-Character-Sheet-Template"] + path = dungeonsheets/modules/DND-5e-LaTeX-Character-Sheet-Template + url = https://github.com/matsavage/DND-5e-LaTeX-Character-Sheet-Template diff --git a/Dockerfile b/Dockerfile index 38ac0bd2..c0d3aee6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM python:latest -RUN apt-get update && apt-get install -y pdftk texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra +RUN apt-get update && apt-get install -y pdftk texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra texlive-luatex texlive-pstricks WORKDIR /app diff --git a/README.rst b/README.rst index 2de2a927..e9254d35 100644 --- a/README.rst +++ b/README.rst @@ -36,7 +36,7 @@ Run the following in a directory with valid character files (such as the example .. code:: bash - $ docker run -it -v $(pwd):/build ghcr.io/canismarko/dungeon-sheets:master + $ docker run -it -v $(pwd):/build ghcr.io/canismarko/dungeon-sheets:latest Installation @@ -48,7 +48,7 @@ Installation .. note:: - Dungeon sheets requires **at least python 3.6**. This is mostly due + dungeon-sheets requires **at least python 3.6**. This is mostly due to the liberal use of f-strings_. If you want to use it with previous versions of python 3, you'll probably have to replace all the f-strings with the older ``.format()`` method or string @@ -72,8 +72,9 @@ pdftk is available in Debian and derivatives as **pdftk**, the package is not available in some RPM distributions, such as Fedora and CentOS. One alternative would be to build your PC sheets using docker. -If the ``pdflatex`` command is available on your system, spellcasters -will include a spellbook with descriptions of each spell known. If +If the ``pdflatex`` command is available on your system, dungeon-sheets +will include a description of a character's features. For spellcasters, +it will include a spellbook with descriptions of each spell known. If not, then this feature will be skipped. In order to properly format descriptions for spells/features/etc., @@ -109,12 +110,29 @@ so attack bonuses and damage can be calculated automatically. Consider using the ``-F`` option to include the excellent D&D 5e template for rendering spellbooks, druid wild forms and features -pages (https://github.com/rpgtex/DND-5e-LaTeX-Template). +pages (https://github.com/rpgtex/DND-5e-LaTeX-Template). dungeon- +sheets includes its own version of the template, but will use a +local one if it is installed. + +Consider using the ``-T`` option to use the beautiful latex character +sheet +(https://github.com/matsavage/DND-5e-LaTeX-Character-Sheet-Template). +This does require lualatex as well as a fairly recent version of +texlive. dungeon-sheets includes its own version of the latex character +template, but will use a local one if it is installed. By default, your character's spells are ordered alphabetically. If you would like your spellbook to be ordered by level, you can use the ``-S`` option to do so. +Furthermore, your character's features are ordered alphabetically by +default as well. Pass the ``-N`` option to order feats by type +(character feats, class feats, racial feats and background feat) and, +if applicable, by sub-type (e.g., for Sorcerers, metamagic feature +choices are collected under the Metamagic feature; for the Battle +Master subclass, Maneuver feature choices are collected under +the Combat Superiority feature.) + If you'd like a **step-by-step walkthrough** for creating a new character, just run ``create-character`` from a command line and a helpful menu system will take care of the basics for you. @@ -130,7 +148,7 @@ properly parsed and rendered into LaTeX or HTML:: class Scrying(Spell): """You can see and hear a particular creature you choose that is on - the same plane of existence as you. The target must make a W isdom + the same plane of existence as you. The target must make a Wisdom saving throw, which is modified by how well you know the target 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 diff --git a/docs/character_files.rst b/docs/character_files.rst index 5f5b40dc..edf204f8 100644 --- a/docs/character_files.rst +++ b/docs/character_files.rst @@ -20,7 +20,7 @@ Each character file must contain a line like:: dungeonsheets_version = "0.4.2" -Without this line, the :ref:`makesheets` command-line utility will ignore +Without this line, the :ref:`makesheets` command-line utility will ignore the file. This is necessary to avoid importing non-D&D python files. .. note:: diff --git a/docs/conf.py b/docs/conf.py index 17daad80..ebee527f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -63,7 +63,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -90,7 +90,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +#html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. diff --git a/dungeonsheets/background.py b/dungeonsheets/background.py index 9b8e20f2..f84693ce 100644 --- a/dungeonsheets/background.py +++ b/dungeonsheets/background.py @@ -103,7 +103,7 @@ class Outlander(Background): class RivalIntern(Background): """You were an intern at a rival of Acquisitions Incorporated, and you gained a healthy respect for nocjusc the job and the franchising - opportunities. but for the ruth- less and efficient way + opportunities. but for the ruthless and efficient way Acquisitions Incorporated goes about its business. Why deal with the rest, when you can work for the best? @@ -117,7 +117,7 @@ class RivalIntern(Background): name = "Rival Intern" skill_proficiencies = ("history", "investigation") - proficiencies_text = ("One type of artisan's tools",) + proficiencies_text = ("[choose one type of artisan's tools]",) languages = ("[choose one]",) features = (feats.InsideInformant,) @@ -263,6 +263,7 @@ class Faceless(Background): about you prevents you from effectively pursuing the path you've chosen. Even so, that doesn't stop you. You've left your old face behind, taking on a new persona, becoming something more. + Characters with the faceless background don a disguise (literally or otherwise) as they adventuree. This persona might be dramatic or subtle. In a way, though, many characters have such larger than life personalities. diff --git a/dungeonsheets/character.py b/dungeonsheets/character.py index a1c737e2..6f112286 100644 --- a/dungeonsheets/character.py +++ b/dungeonsheets/character.py @@ -28,6 +28,7 @@ from dungeonsheets.content_registry import find_content from dungeonsheets.dice import combine_dice from dungeonsheets.equipment_reader import equipment_weight_parser +from dungeonsheets.features import Feature, FeatureSelector from dungeonsheets.weapons import Weapon log = logging.getLogger(__name__) @@ -451,32 +452,10 @@ def other_weapon_proficiencies_text(self): @property def features(self): fts = set(self.custom_features) - fighting_style_defined = False - set_of_fighting_styles = { - "Fighting Style (Archery)", - "Fighting Style (Defense)", - "Fighting Style (Dueling)", - "Fighting Style (Great Weapon Fighting)", - "Fighting Style (Protection)", - "Fighting Style (Two-Weapon Fighting)", - } - for temp_feature in fts: - fighting_style_defined = temp_feature.name in set_of_fighting_styles - if fighting_style_defined: - break - if not self.has_class: return fts for c in self.class_list: fts |= set(c.features) - for feature in fts: - if ( - fighting_style_defined - and feature.name == "Fighting Style (Select One)" - ): - temp_feature = feature - fts.remove(temp_feature) - break if self.race is not None: fts |= set(getattr(self.race, "features", ())) # some races have level-based features (Ex: Aasimar) @@ -488,6 +467,48 @@ def features(self): return sorted(tuple(fts), key=(lambda x: x.name)) + @property + def features_by_type(self): + fts: dict[str, list[type[Feature]]] = { + "Feats": [], + "Class Features": [], + "Racial Features": [], + "Background Features": [], + } + other_feat_choices = list() + # Add player choices; distinguish between general feats and + # feat choices such as fighting styles and metamagic options. + for item in self.custom_features: + if item.source == "Feats": + fts["Feats"].append(item) + else: + other_feat_choices.append(item) + for c in self.class_list: + for item in list(c.features): + if item not in other_feat_choices: + fts["Class Features"].append(item) + # Now check whether any items in class_feat_choices + # is a subclass of current item. + for choice in other_feat_choices: + if choice.__class__.__bases__[0] is item.__class__: + fts["Class Features"].append(choice) + # Make sure we didn't miss any feat choices: + for choice in other_feat_choices: + if choice not in fts["Class Features"]: + fts["Class Features"].insert(0, choice) + if self.race is not None: + for item in getattr(self.race, "features", ()): + fts["Racial Features"].append(item) + # some races have level-based features (Ex: Aasimar) + if hasattr(self.race, "features_by_level"): + for lvl in range(1, self.level + 1): + for item in list(self.race.features_by_level[lvl]): + fts["Racial Features"].append(item) + if self.background is not None: + for item in getattr(self.background, "features", ()): + fts["Background Features"].append(item) + return fts + @property def custom_features_text(self): return tuple([f.name for f in self.custom_features]) @@ -578,7 +599,7 @@ def spells_prepared(self): spells |= set(f.spells_prepared) for c in self.spellcasting_classes: spells |= set(c.spells_prepared) - return sorted(tuple(spells), key=(lambda x: x.name)) + return spells def set_attrs(self, **attrs): """ @@ -612,7 +633,10 @@ def set_attrs(self, **attrs): self.magic_items.append(ThisMagicItem(wielder=self)) elif attr == "weapon_proficiencies": self.other_weapon_proficiencies = () - msg = 'Magic Item "{}" not defined. Please add it to ``weapons.py``' + if r"[" in str(val): + msg = 'Don\'t forget to choose optional proficiencies: "{}".' + else: + msg = 'Magic Item "{}" not defined. Please add it to ``weapons.py``' wps = set( [ self._resolve_mechanic( @@ -642,7 +666,12 @@ def set_attrs(self, **attrs): warning_message=msg, ) _features.append(ThisFeature) - self.custom_features += tuple(F(owner=self) for F in _features) + feature_choices = attrs.get("feature_choices", []) + for F in _features: + if issubclass(F, FeatureSelector): + self.custom_features.append(F(owner=self, feature_choices=feature_choices)) + elif issubclass(F, Feature): + self.custom_features.append(F(owner=self)) elif (attr == "spells") or (attr == "spells_prepared"): # Create a list of actual spell objects _spells = [] @@ -654,8 +683,6 @@ def set_attrs(self, **attrs): warning_message=msg, ) _spells.append(ThisSpell) - # Sort by name - _spells.sort(key=lambda spell: spell.name) # Save list of spells to character atribute if attr == "spells": # Instantiate them all for the spells list @@ -779,7 +806,15 @@ def carrying_capacity(self): @property def carrying_weight(self): weight = equipment_weight_parser(self.equipment, self.equipment_weight_dict) - weight += sum([w.weight for w in self.weapons]) + weapons_added = [] + for w in self.weapons: + weight += w.weight + weapons_added.append(w.name) + for m in self.magic_items: + if m.name in weapons_added: + weapons_added.remove(w.name) + else: + weight += m.weight if self.armor: weight += self.armor.weight if self.shield: @@ -851,17 +886,24 @@ def proficiencies_by_type(self): # Backward compatibility with chosen_tools if not self.chosen_tools == "" : prof_set.update(self.chosen_tools.split(",")) - # Extract "Other" proficiencies (artisan's tools, musical instruments, ... ) + # Extract "Other" proficiencies (artisan's tools, musical instruments, + # ... ) and "Optional" proficiencies prof_dict["Other"] = [] + prof_dict["Optional"] = [] for prof in prof_set: if not ( # Anything other than weapons, armor, shields or options any (re.search(w.name.lower(), prof) for w in w_pro) or any (ar in prof for ar in armor_types) or "shields" in prof + or r"[" in prof ): prof_dict["Other"].append(prof) + elif r"[" in prof: + # Collect optional proficiencies + prof_dict["Optional"].append(prof) prof_dict["Other"] = ", ".join(prof_dict["Other"]) + prof_dict["Optional"] = ", ".join(prof_dict["Optional"]) # Nice capitalization prof_dict["Other"] = re.sub(r"[A-Za-z]+('[A-Za-z]+)?", lambda word: word.group(0).capitalize(), diff --git a/dungeonsheets/classes/artificer.py b/dungeonsheets/classes/artificer.py index d708321c..57e9a535 100644 --- a/dungeonsheets/classes/artificer.py +++ b/dungeonsheets/classes/artificer.py @@ -89,7 +89,7 @@ class Artificer(CharClass): "Simple weapons", "Thieves' tools", "Tinker's tools", - "One type of artisan's tools of your choice", + "[Choose one type of artisan's tools]", ) _multiclass_proficiencies_text = ( "Light armor", diff --git a/dungeonsheets/classes/bard.py b/dungeonsheets/classes/bard.py index 2e0e1a6b..3250b6f9 100644 --- a/dungeonsheets/classes/bard.py +++ b/dungeonsheets/classes/bard.py @@ -158,7 +158,7 @@ class Bard(CharClass): "longswords", "rapiers", "shortswords", - "three musical instruments of your choice", + "[choose three musical instruments]", ) weapon_proficiencies = ( weapons.HandCrossbow, diff --git a/dungeonsheets/classes/bloodhunter.py b/dungeonsheets/classes/bloodhunter.py index fa392fc0..9e27ad61 100644 --- a/dungeonsheets/classes/bloodhunter.py +++ b/dungeonsheets/classes/bloodhunter.py @@ -6,7 +6,14 @@ #Blood Hunter class OrderOfTheGhostslayer(SubClass): - """The Order of the Ghostslayer is the oldest of the orders, having originally rediscovered the secrets of blood magic and refined them for combat against the scourge of undeath. Ghostslayers seek out and study the moment of death, obsessing over the mysteries of the transition and how it can become corrupted by unholy powers to rise once more. Tuning their abilities to annihilate such abominations, these zealous blood hunters seek out the sources of such necromantic energies, intent to destroy them wherever they arise. + """The Order of the Ghostslayer is the oldest of the orders, having + originally rediscovered the secrets of blood magic and refined them for + combat against the scourge of undeath. Ghostslayers seek out and study the + moment of death, obsessing over the mysteries of the transition and how it + can become corrupted by unholy powers to rise once more. Tuning their + abilities to annihilate such abominations, these zealous blood hunters seek + out the sources of such necromantic energies, intent to destroy them + wher ever they arise. """ @@ -17,10 +24,22 @@ class OrderOfTheGhostslayer(SubClass): features_by_level[11] = [features.BrandOfSundering] features_by_level[15] = [features.BloodCurseOfTheExorcist] features_by_level[18] = [features.RiteRevival] - - + + class OrderOfTheLycan(SubClass): - """Of the many terrible curses that plague the realm, few are as ancient or as feared as Lycanthropy. Passed through blood, this affliction seeds a host with the savage strength and hunger for violence of a wicked beast. The Order of the Lycan is a proud order of blood hunters who undergo “The Taming,” a ceremonial inflicting of lycanthropy from a senior member. These hunters then use their abilities to harness the power of the monster they harbor without losing themselves to it. Through intense honing of one’s own willpower, combined with the secrets of the order’s blood magic rituals, members learn to control and unleash their hybrid form for short periods of time. Enhanced physical prowess, unnatural resilience, and razor sharp claws make these warriors a terrible foe to any evil that crosses their path. Yet, no training is perfect, and without care and complete focus, even the greatest of blood hunters can temporarily lose themselves to the bloodlust. + """Of the many terrible curses that plague the realm, few are as ancient + or as feared as Lycanthropy. Passed through blood, this affliction seeds a + host with the savage strength and hunger for violence of a wicked beast. The + Order of the Lycan is a proud order of blood hunters who undergo “The + Taming,” a ceremonial inflicting of lycanthropy from a senior member. These + hunters then use their abilities to harness the power of the monster they + harbor without losing themselves to it. Through intense honing of one’s own + willpower, combined with the secrets of the order’s blood magic rituals, + members learn to control and unleash their hybrid form for short periods of + time. Enhanced physical prowess, unnatural resilience, and razor sharp claws + make these warriors a terrible foe to any evil that crosses their path. Yet, + no training is perfect, and without care and complete focus, even the + greatest of blood hunters can temporarily lose themselves to the bloodlust. """ @@ -30,11 +49,21 @@ class OrderOfTheLycan(SubClass): features_by_level[7] = [features.StalkerProwess] features_by_level[11] = [features.AdvancedTrasformation] features_by_level[15] = [features.BrandOfTheVoracious] - features_by_level[18] = [features.HybridTrasformationMastery] + features_by_level[18] = [features.HybridTrasformationMastery] class OrderOfTheMutant(SubClass): - """The process of the Hunter’s Bane is a painful, scarring, and sometimes fatal experience. Those that survive find themselves irrevocably changed, enhanced. Some found this experience exalting, embracing the ability to alter one’s own physiology through a combination of hemocraft and corrupted alchemy. Over generations of experimentation, a splinter order of blood hunters began to emerge, one that focused on brewing toxic elixirs to modify their capabilities in battle, altering their blood and, over time, become something beyond what they once were. They called themselves the Order of the Mutant. Researching their targets to know their strengths and weaknesses, these blood hunters can alter their biology to be best prepared for the coming conflict. + """The process of the Hunter’s Bane is a painful, scarring, and + sometimes fatal experience. Those that survive find themselves irrevocably + changed, enhanced. Some found this experience exalting, embracing the + ability to alter one’s own physiology through a combination of hemocraft and + corrupted alchemy. Over generations of experimentation, a splinter order of + blood hunters began to emerge, one that focused on brewing toxic elixirs to + modify their capabilities in battle, altering their blood and, over time, + become something beyond what they once were. They called themselves the + Order of the Mutant. Researching their targets to know their strengths and + weaknesses, these blood hunters can alter their biology to be best prepared + for the coming conflict. """ @@ -48,15 +77,23 @@ class OrderOfTheMutant(SubClass): class OrderOfTheProfaneSoul(SubClass): - """Those who have taken to the Order of the Profane Soul have seen the limits of hemocraft against some of the most ancient and cruel fiends and terrors of the world. Unable to pursue beings of such power, creatures able to vanish amongst the nobles without a trace, or bend the mind of the most stalwart warrior with but a glance, this order trusted in their resilience and delved into this same well of corrupting arcane knowledge, making pacts with lesser evils to better combat the greater. While they may have traded a part of themselves, members of this order believe the power gained far outweighs the price, for even devils now quake when they know they’ve drawn the attention of the Order of the Profane Soul. + """Those who have taken to the Order of the Profane Soul have seen the + limits of hemocraft against some of the most ancient and cruel fiends and + terrors of the world. Unable to pursue beings of such power, creatures able + to vanish amongst the nobles without a trace, or bend the mind of the most + stalwart warrior with but a glance, this order trusted in their resilience + and delved into this same well of corrupting arcane knowledge, making pacts + with lesser evils to better combat the greater. While they may have traded a + part of themselves, members of this order believe the power gained far + outweighs the price, for even devils now quake when they know they’ve drawn + the attention of the Order of the Profane Soul. """ name = "Order of the Profane Soul" features_by_level = defaultdict(list) features_by_level[3] = [features.OtherworldlyPatron, features.PactMagic, features.RiteFocus] - features_by_level[7] = [features.MysticFrenzy, -features.RevealedArcana] + features_by_level[7] = [features.MysticFrenzy, features.RevealedArcana] features_by_level[11] = [features.BrandOfTheSappingScar] features_by_level[15] = [features.UnsealedArcana] features_by_level[18] = [features.BloodCurseOfTheSouleater] @@ -83,7 +120,7 @@ class OrderOfTheProfaneSoul(SubClass): 18: (3, 0, 0, 2, 0, 0, 0, 0, 0, 0), 19: (3, 0, 0, 0, 2, 0, 0, 0, 0, 0), 20: (3, 0, 0, 0, 2, 0, 0, 0, 0, 0), - } + } class BloodHunter(CharClass): @@ -118,7 +155,7 @@ class BloodHunter(CharClass): features.HunterBane, features.BloodMaledict, ] - + features_by_level[2] = [ features.CrimsonRites, features.BloodHunterFightingStyle, @@ -130,9 +167,3 @@ class BloodHunter(CharClass): features_by_level[13] = [features.BrandOfTethering] features_by_level[14] = [features.HardenedSoul] features_by_level[20] = [features.SanguineMastery] - subclasses_available = ( - OrderOfTheGhostslayer, - OrderOfTheProfaneSoul, - OrderOfTheMutant, - OrderOfTheLycan, - ) diff --git a/dungeonsheets/classes/monk.py b/dungeonsheets/classes/monk.py index b3832c8a..81997b06 100644 --- a/dungeonsheets/classes/monk.py +++ b/dungeonsheets/classes/monk.py @@ -156,7 +156,7 @@ class Monk(CharClass): "simple weapons", "shortswords", "unarmed", - "one type of artisan's tools or one musical instrument", + "[choose one type of artisan's tools or one musical instrument]", ) weapon_proficiencies = (weapons.Shortsword, weapons.Unarmed, weapons.SimpleWeapon) multiclass_weapon_proficiencies = weapon_proficiencies diff --git a/dungeonsheets/create_character.py b/dungeonsheets/create_character.py index a0b855b2..0473e5ae 100644 --- a/dungeonsheets/create_character.py +++ b/dungeonsheets/create_character.py @@ -834,6 +834,20 @@ def create(self): self.make_pdf = self.add(npyscreen.Checkbox, name="Create PDF:", value=True) def on_ok(self): + # Finally, deal with some optional proficencies: + self.parentApp.character.proficiencies_text = () + self.parentApp.character.optional_weapon_proficiencies = () + optional_proficiencies = list(self.parentApp.character.proficiencies_by_type["Optional"].split(", ")) + for prof in optional_proficiencies: + if "weapon" in prof: + self.parentApp.character.optional_weapon_proficiencies += (prof,) + log.debug(f"Optional weapon proficiencies: {self.parentApp.character.optional_weapon_proficiencies}") + elif "skill" in prof: + self.parentApp.character.skill_proficiencies += (prof,) + log.debug(f"Optional skill proficiencies: {self.parentApp.character.skill_proficiencies}") + else: + self.parentApp.character.proficiencies_text += (prof,) + log.debug(f"Other optional proficiencies: {self.parentApp.character.proficiencies_text}") super().to_next() def on_cancel(self): diff --git a/dungeonsheets/features/artificer.py b/dungeonsheets/features/artificer.py index b869d876..b7761a8c 100644 --- a/dungeonsheets/features/artificer.py +++ b/dungeonsheets/features/artificer.py @@ -3,10 +3,11 @@ class _SpecialistSpells(Feature): - """Starting at 3rd level, you always have certain spells pre­pared after + """Starting at 3rd level, you always have certain spells prepared after you reach particular levels in this class, as shown in the Specialization Spells table. These spells count as artificer spells for you, but they don't count against the number of artificer spells you prepare. + """ _name = "Select One" @@ -37,7 +38,9 @@ class ArtificerSpellcasting(Feature): look as if you're producing wonders using mundane items or out­landish inventions. - **Tools Required** You produce your artificer spell effects through your + **Tools Required** + + You produce your artificer spell effects through your tools. You must have a spellcasting focus -- specifically thieves' tools or some kind of artisan's tool -- in hand when you cast any spell with this Spellcasting feature. You must be proficient with the tool to use it in @@ -46,6 +49,7 @@ class ArtificerSpellcasting(Feature): After you gain the Infuse Item feature at 2nd level, you can also use any item bearing one of your infusions as a spellcasting focus. + """ name = "Spellcasting" @@ -113,35 +117,38 @@ class InfuseItem(Feature): magical infusions. The magic items you create with this feature are effectively prototypes of permanent items. - Infusions known - When you gain this feature, pick four artificer infusions to - learn, choosing from the "Artificer Infusions" section at the - end of the class's description. You learn additional infusions - of your choice when you reach certain levels in this class, as - shown in the Infusions Known column of the Artificer - table. Whenever you gain a level in this class, you can re­place - one of the artificer infusions you learned with a new one. - Infusing an item - Whenever you finish a long rest, you can touch a non­magical - object and imbue it with one of your artificer in­fusions, - turning it into a magic item. An infusion works on only certain - kinds of objects, as specified in the infusion's description. If - the item requires attunement, you can attune yourself to it the - instant you infuse the item. If you decide to attune to the item - later, you must do so using the normal process for attunement - (see "Attunement" in chapter 7 of the Dungeon Master's Guide). - Your infusion remains in an item indefinitely, but when you die, - the infusion vanishes after a number of days have passed equal - to your Intelligence modifier (minimum of 1 day). The infusion - also vanishes if you give up your knowledge of the infusion for - another one. You can infuse more than one nonmagical object at - the end of a long rest; the maximum number of objects appears in - the Infused Items column of the Artificer table. You must touch - each of the objects, and each of your infusions can be in only - one object at a time. Moreover, no object can bear more than one - of your infusions at a time. If you try to exceed your maximum - number of in­fusions, the oldest infusion immediately ends, and - then the new infusion applies. + **Infusions known** + + When you gain this feature, pick four artificer infusions to + learn, choosing from the "Artificer Infusions" section at the + end of the class's description. You learn additional infusions + of your choice when you reach certain levels in this class, as + shown in the Infusions Known column of the Artificer + table. Whenever you gain a level in this class, you can replace + one of the artificer infusions you learned with a new one. + + **Infusing an item** + + Whenever you finish a long rest, you can touch a non­magical + object and imbue it with one of your artificer in­fusions, + turning it into a magic item. An infusion works on only certain + kinds of objects, as specified in the infusion's description. If + the item requires attunement, you can attune yourself to it the + instant you infuse the item. If you decide to attune to the item + later, you must do so using the normal process for attunement + (see "Attunement" in chapter 7 of the Dungeon Master's Guide). + Your infusion remains in an item indefinitely, but when you die, + the infusion vanishes after a number of days have passed equal + to your Intelligence modifier (minimum of 1 day). The infusion + also vanishes if you give up your knowledge of the infusion for + another one. You can infuse more than one nonmagical object at + the end of a long rest; the maximum number of objects appears in + the Infused Items column of the Artificer table. You must touch + each of the objects, and each of your infusions can be in only + one object at a time. Moreover, no object can bear more than one + of your infusions at a time. If you try to exceed your maximum + number of in­fusions, the oldest infusion immediately ends, and + then the new infusion applies. """ @@ -256,7 +263,7 @@ class SpellStoringItem(Feature): modifier. If the spell requires concentration, the creature must concentrate. The spell stays in the object until it's been used a number of times equal to twice your Intelligence modifier (minimum - of twice) or until you use this fe ature again to store a spell in + of twice) or until you use this feature again to store a spell in an object. """ @@ -350,27 +357,32 @@ class ExperimentalElixir(Feature): create the elixir in an empty flask you touch, and you choose the elixir's effect from the Experimental Elixir table. - **Experimental Elixir** - - roll d6 + ======= ================================================================== + Experimental Elixir + -------------------------------------------------------------------------- + d6 Effect + ======= ================================================================== + 1 **Healing.** The drinker regains a number of hit points equal to + 2d4 + your Intelligence modifier. - **1 -- Healing.** The drinker regains a number of hit points equal to 2d4 + - your Intelligence modifier. + 2 **Swiftness.** The drinker's walking speed increases by 10 feet + for 1 hour. - **2 -- Swiftness.** The drinker's walking speed increases by 10 feet for 1 - hour. + 3 **Resilience.** The drinker gains a +1 bonus to AC for 10 + minutes. - **3 -- Resilience.** The drinker gains a +1 bonus to AC for 10 minutes. + 4 **Boldness.** The drinker can roll a d4 and add the num­ber + rolled to every attack roll and saving throw they make for the + next minute. - **4 -- Boldness.** The drinker can roll a d4 and add the num­ber rolled to - every attack roll and saving throw they make for the next minute. + 5 **Flight.** The drinker gains a flying speed of 10 feet for 10 + minutes. - **5 -- Flight.** The drinker gains a flying speed of 10 feet for 10 - minutes. + 6 **Transformation.** The drinker's body is transformed as if by + the alter self spell. The drinker determines the transformation + caused by the spell, the effects of which last for 10 minutes. + ======= ================================================================== - **6 -- Transformation.** The drinker's body is transformed as if by the - alter self spell. The drinker determines the transformation caused by the - spell, the effects of which last for 10 minutes. """ name = "Experimental Elixir" @@ -484,23 +496,31 @@ class EldritchCannon(Feature): part of the same bonus action, you can direct the cannon to walk or climb up to 15 feet to an unoccupied space, provided it has legs. - **Eldritch Cannons** - - *Flamethrower*: The cannon exhales fire in an adjacent 15-foot cone that - you designate. Each creature in that area must make a Dexterity saving - throw against your spell save DC, taking 2d8 fire damage on a failed save - or half as much damage on a successful one. The fire ignites any flammable - objects in the area that aren't being worn or carried. - - *Force Ballista*: Make a ranged spell attack, originating from the cannon, - at one creature or object within 120 feet of it. On a hit, the target takes - 2d8 force damage, and if the target is a creature, it is pushed up to 5 - feet away from the cannon. + ================ ========================================================== + Eldritch Cannons + ---------------------------------------------------------------------------- + Cannon Activation + ================ ========================================================== + Flamethrower The cannon exhales fire in an adjacent 15-foot cone that + you designate. Each creature in that area must make a + Dexterity saving throw against your spell save DC, + taking 2d8 fire damage on a failed save or half as much + damage on a successful one. The fire ignites any + flammable objects in the area that aren't being worn or + carried. + + Force Ballista Make a ranged spell attack, originating from the cannon, + at one creature or object within 120 feet of it. On a + hit, the target takes 2d8 force damage, and if the + target is a creature, it is pushed up to 5 feet away + from the cannon. + + Protector The cannon emits a burst of positive energy that grants + itself and each creature of your choice within 10 feet + of it a number of temporary hit points equal to 1d8 + + your Intelligence modifier (minimum of +1) + ================ ========================================================== - *Protector*: The cannon emits a burst of positive energy - that grants itself and each creature of your choice within 10 feet of it a - number of temporary hit points equal to 1d8 + your Intelligence modifier - (minimum of +1) """ name = "Eldritch Cannon" diff --git a/dungeonsheets/features/backgrounds.py b/dungeonsheets/features/backgrounds.py index bf697d15..05b80c82 100644 --- a/dungeonsheets/features/backgrounds.py +++ b/dungeonsheets/features/backgrounds.py @@ -169,7 +169,7 @@ class ShipsPassage(Feature): can't be certain of a schedule or route that will meet your every need. Your Dungeon Master will determine how long it takes to get where you need to go. In return for your free passage, you and your companions are - expected to assist the crew during the voyage + expected to assist the crew during the voyage. """ @@ -240,7 +240,7 @@ class EarToTheGround(Feature): class WatchersEye(Feature): """Your experience in enforcing the law, and dealing with lawbreakers, gives you a feel for local laws and criminals. You can easily find the local - outpost of the watch or a simila r organization, and just as easily pick + outpost of the watch or a similar organization, and just as easily pick out the dens of criminal activity in a community, although you're more likely to be welcome in the former locations rather than the latter. @@ -353,8 +353,8 @@ class KnightlyRegard(Feature): """You receive shelter and succor from members of your knightly order and those who are sympathetic to its aims. If your order is a religious one, you can gain aid from temples and other religious communities of your - deity. Knights of civic orders can get help from the community- whether a - lone settlement or a great nation- that they serve, and knights of + deity. Knights of civic orders can get help from the community whether a + lone settlement or a great nation that they serve, and knights of philosophical orders can find help from those they have aided in pursuit of their ideals , and those who share those ideals. @@ -429,17 +429,31 @@ class FacelessPersona(Feature): your persona, or work with the DM to create a persona that's unique to your character and suits the tone of your game. - **d10|FacelessPersona:**\n - 1|A flamboyant spy or brigand\n - 2|The incarnation of a nation or people\n - 3|A scoudnrell with a masked guise\n - 4|A vengeful spirit\n - 5|The manifestation of a deity or your faith\n - 6|One whose beauty is gratly accented using makeup\n - 7|An impersonation of another hero\n - 8|The embodiment of a schoool of magic\n - 9|A warrior with distinctive armor\n - 10|A disguise with animalistic or monstrous characteristics, meant to inspire fear + ====== ==================================================== + d10 Faceless Persona + ====== ==================================================== + 1 A flamboyant spy or brigand + + 2 The incarnation of a nation or people + + 3 A scoundrel with a masked guise + + 4 A vengeful spirit + + 5 The manifestation of a deity or your faith + + 6 One whose beauty is greatly accented using makeup + + 7 An impersonation of another hero + + 8 The embodiment of a school of magic + + 9 A warrior with distinctive armor + + 10 A disguise with animalistic or monstrous + characteristics, meant to inspire fear + ====== ==================================================== + """ name = "Faceless Persona" @@ -454,9 +468,10 @@ class DualPersonalities(Feature): removing your disguise and revealing your true face, you are no longer identifiable as your persona. This Allows you to change appearances between your two personalities as often as you wish, using one to hide the other or - seve as convenient camouflage. However, should someone realize the + serve as convenient camouflage. However, should someone realize the connection between your persona and your true self, your deception might - lose its effectiveness + lose its effectiveness. + """ name = "Dual Personalities" diff --git a/dungeonsheets/features/barbarian.py b/dungeonsheets/features/barbarian.py index ee035a4e..fca91db6 100644 --- a/dungeonsheets/features/barbarian.py +++ b/dungeonsheets/features/barbarian.py @@ -22,7 +22,7 @@ class Rage(Feature): creature since your last turn or taken damage since then. You can also end your rage on your turn as a bonus action. Once you have raged the number of times shown for your barbarian level in the Rages column of the Barbarian - table, you must finish a long rest before you can rage again + table, you must finish a long rest before you can rage again. """ @@ -69,7 +69,7 @@ class RecklessAttack(Feature): attack with fierce desperation. When you make your first attack on your turn, you can decide to attack recklessly. Doing so gives you advantage on melee weapon attack rolls using Strength during this turn, but attack rolls - against you have advantage until your next turn + against you have advantage until your next turn. """ @@ -184,7 +184,7 @@ class Frenzy(Feature): when you rage. If you do so, for the duration of your rage you can make a single melee weapon attack as a bonus action on each of your turns after this one. When your rage ends, you suffer one level of exhaustion (as - described in appendix A) + described in appendix A). """ @@ -270,7 +270,7 @@ class EagleSpirit(Feature): class WolfSpirit(Feature): """While you're raging, your friends have advantage on melee attack rolls against any creature within 5 feet of you that is hostile to you. The - spirit of the wolf makes you a leader of hunters + spirit of the wolf makes you a leader of hunters. """ @@ -280,7 +280,7 @@ class WolfSpirit(Feature): class ElkSpirit(Feature): """While you're raging and aren't wearing heavy armor, your walking speed - increases by 15 feet. The spirit of the elk makes you extraordinarily swift + increases by 15 feet. The spirit of the elk makes you extraordinarily swift. """ @@ -290,7 +290,7 @@ class ElkSpirit(Feature): class TigerSpirit(Feature): """While raging, you can add 10 feet to your long jump distance and 3 feet to - your high jump distance. The spirit of the tiger empowers your leaps + your high jump distance. The spirit of the tiger empowers your leaps. """ @@ -364,7 +364,7 @@ class ElkAspect(FeatureSelector): """Whether mounted or on foot , your travel pace is doubled, as is the travel pace of up to ten companions while they're within 60 feet of you and you're not incapacitated (see chapter 8 in the Player's Handbook for more - information about travel pace). The elk spirit helps you roam far and fast + information about travel pace). The elk spirit helps you roam far and fast. """ @@ -375,7 +375,7 @@ class ElkAspect(FeatureSelector): class TigerAspect(FeatureSelector): """You gain proficiency in two skills from the following list: Athletics, Acrobatics, Stealth, and Survival. The cat spirit hones your survival - instincts + instincts. """ @@ -460,7 +460,7 @@ class ElkAttunement(Feature): the space of a Large or smaller creature. That creature must succeed on a Strength saving throw (DC 8 + your Strength bonus + your proficiency bonus) or be knocked prone and take bludgeoning damage equal to 1d12 + your - Strength modifier + Strength modifier. """ @@ -472,7 +472,7 @@ class TigerAttunement(Feature): """While you're raging, if you move at least 20 feet in a straight line toward a Large or smaller target right before making a melee weapon attack against it, you can use a bonus action to make an additional melee weapon attack - against it + against it. """ @@ -527,7 +527,7 @@ class BattleragerArmor(Feature): class RecklessAbandon(Feature): """Beginning at 6th level, when you use Reckless Attack while raging, you also gain temporary hit points equal to your Constitution modifier (minimum of - 1). They vanish if any of them are left when your rage ends . + 1). They vanish if any of them are left when your rage ends. """ @@ -565,7 +565,7 @@ class AncestralProtectors(Feature): disadvantage on any attack roll that isn't against you, and when the target hits a creature other than you with an attack, that creature has resistance to the damage dealt by the attack. The effect on the target ends early - ifyour rage ends + if your rage ends. """ @@ -605,7 +605,7 @@ class ConsultTheSpirits(Feature): sensor, this use of clairvoyance invisibly summons one Of your ancestral spirits to the chosen location. Wisdom is your spellcasting ability for these spells. After you cast either spell in this way, you can't use this - feature again until you finish a short or long rest + feature again until you finish a short or long rest. """ @@ -726,7 +726,7 @@ class DesertSoul(Feature): **Desert**: You gain resistance to fire damage, and you don't suffer the effects of extreme heat, as described in the Dungeon Master's Guide. Moreover, as an action, you can touch a flammable object that isn't - being worn or carried by anyone else and set it on fire + being worn or carried by anyone else and set it on fire. """ @@ -756,7 +756,7 @@ class TundraSoul(Feature): effects of extreme cold, as described in the Dungeon Master's Guide. Moreover, as an action, you can touch water and turn a 5-foot cube Of it into ice, which melts after 1 minute. This action fails if a creature - is in the cube + is in the cube. """ name = "Storm Soul (Tundra)" @@ -810,7 +810,7 @@ class RagingDesert(Feature): class RagingSea(Feature): """At 14th level, the power of the storm you channel grows mightier, lashing out at your foes. The effect is based on the environment you chose for your - Storm Aura + Storm Aura. **Sea**: When you hit a creature in your aura with an attack, you can use your reaction to force that creature to make a Strength saving throw. On a @@ -825,12 +825,12 @@ class RagingSea(Feature): class RagingTundra(Feature): """At 14th level, the power of the storm you channel grows mightier, lashing out at your foes. The effect is based on the environment you chose for your - Storm Aura + Storm Aura. **Tundra**: Whenever the effect of your Storm Aura is activated, you can choose one creature you can see in the aura. That creature must succeed on a Strength saving throw, or its speed is reduced to 0 until the start of - your next turn, as magical frost covers it + your next turn, as magical frost covers it. """ @@ -879,7 +879,7 @@ class WarriorOfTheGods(Feature): """At 3rd level, your soul is marked for endless battle. If a spell, such as raise dead, has the sole effect of restoring you to life (but not undeath), the caster doesn't need material components to cast the spell - on you + on you. """ @@ -891,6 +891,7 @@ class FanaticalFocus(Feature): """Starting at 6th level, the divine power that fuels your rage can protect you. If you fail a saving throw while you're raging, you can reroll it, and you must use the new roll. You can use this ability only once per rage. + """ name = "Fanatical Focus" @@ -900,10 +901,10 @@ class FanaticalFocus(Feature): class ZealousPresence(Feature): """At 10th level, you learn to channel divine power to inspire zealotry in others. As a bonus action, you unleash a battle cry infused with divine - energy. Up to ten other creatures of your choice within 60 feet ofyou that + energy. Up to ten other creatures of your choice within 60 feet of you that can hear you gain advantage on attack rolls and saving throws until the start of your next turn. Once you use this feature, you can't use it again - until you finish a long rest + until you finish a long rest. """ diff --git a/dungeonsheets/features/bard.py b/dungeonsheets/features/bard.py index 52b4689e..81d60b2e 100644 --- a/dungeonsheets/features/bard.py +++ b/dungeonsheets/features/bard.py @@ -194,7 +194,7 @@ class PeerlessSkill(Feature): use of Bardic Inspiration. Roll a Bardic Inspiration die and add the number rolled to your ability check. You can choose to do so after you roil the die for the ability check, but before the DM tells you whether you succeed - or fail + or fail. """ @@ -209,7 +209,7 @@ class CombatInspiration(Feature): rolled to a weapon damage roll it just made. Alternatively, when an attack roll is made against the creature, it can use its reaction to roll the Bardic Inspiration die and add the number rolled to its AC against that - attack, after seeing the roll but before knowing whether it hits or misses + attack, after seeing the roll but before knowing whether it hits or misses. """ @@ -219,7 +219,7 @@ class CombatInspiration(Feature): class BardExtraAttack(Feature): """Starting at 6th level, you can attack twice, instead of once, whenever you - take the Attack action on your turn + take the Attack action on your turn. """ @@ -230,7 +230,7 @@ class BardExtraAttack(Feature): class BardBattleMagic(Feature): """At 14th level, you have mastered the art of weaving spellcasting and weapon use into a single harmonious act. When you use your action to cast a bard - spell, you can make one weapon attack as a bonus action + spell, you can make one weapon attack as a bonus action. """ @@ -269,8 +269,8 @@ class EnthrallingPerformance(Feature): """Starting at 3rd level, you can charge your performance with seductive, fey magic. If you perform for at least 1 minute, you can attempt to inspire wonder in your audience by singing, reciting a poem, or dancing. At the end - of the performance, choose a number of humanoids within 60 feet ofyou who - watched and listened to all of it, up to a number equal tO your Charisma + of the performance, choose a number of humanoids within 60 feet of you who + watched and listened to all of it, up to a number equal to your Charisma modifier (minimum of one). Each target must succeed on a Wisdom saving throw against your spell save DC or be charmed by you. While charmed in this way, the target idolizes you, it speaks glowingly Of you to anyone who @@ -281,7 +281,7 @@ class EnthrallingPerformance(Feature): If a target succeeds on its saving throw, the target has no hint that you tried to charm it. Once you use this feature, you can't use it again until - you finish a short or long rest + you finish a short or long rest. """ @@ -297,9 +297,9 @@ class MantleOfMajesty(Feature): concentrating on a spell). During this time, you can cast command as a bonus action on each of your turns, without expending a spell slot. - Any creature charmed by you automatically failfs its saving throw against + Any creature charmed by you automatically fails its saving throw against the command you cast with this feature. Once you use this feature, you - can't use it again until you finish a long rest + can't use it again until you finish a long rest. """ @@ -312,7 +312,7 @@ class UnbreakableMajesty(Feature): makes you look more lovely and fierce. In addition, as a bonus action, you can assume a magically majestic presence for 1 minute or until you are incapacitated. For the duration, whenever any creature tries to attack you - for the first time on a turn, the at- tacker must make a Charisma saving + for the first time on a turn, the attacker must make a Charisma saving throw against your spell save DC. On a failed save, it can't attack you on this turn, and it must choose a new target for its attack or the attack is wasted. @@ -331,9 +331,9 @@ class UnbreakableMajesty(Feature): # College of Swords class SwordsProficiency(Feature): """When you join the College of Swords at 3rd level, you gain proficiency with - medium armor and the scimitar. If you‘re proficient with a simple or + medium armor and the scimitar. If you're proficient with a simple or martial melee weapon, you can use it as a spellcasting focus for your hard - spells + spells. """ @@ -368,23 +368,26 @@ class BladeFlourish(Feature): one of the following Blade Flourish options of your choice. You can use only one Blade Flourish option per turn. - **Defensive Flourish**: You can expend one use of your Bardic Inspiration - to cause the weapon to deal extra damage to the target you hit. The damage - equals the number you roll on the Bardic Inspiration die. You also add the - number rolled to your AC until the start of your next turn. - - **Slashing Flourish**: You can expend one use of your Bardic Inspiration to - cause the weapon to deal extra damage to the target you hit and to any - other creature of your choice that you can see within 5 feet ofyou. The - damage equalsthe number you roll on the Bardic Inspi- ration die. - - **Mobile Flourish**: You can expend one use of your Bar- dic InSpiration to - cause the weapon to deal extra dam- age to the target you hit. The damage - equals the number you roll on the Bardic Inspiration die. You can also push - the target up to 5 feet away from you, plus a number of feet equal to the - number you roll on that die. You can then immediately use your reaction to - move up to your walking speed to an unoccupied space within 5 feet of the - target. + Defensive Flourish + You can expend one use of your Bardic Inspiration + to cause the weapon to deal extra damage to the target you hit. The damage + equals the number you roll on the Bardic Inspiration die. You also add the + number rolled to your AC until the start of your next turn. + + Slashing Flourish + You can expend one use of your Bardic Inspiration to + cause the weapon to deal extra damage to the target you hit and to any + other creature of your choice that you can see within 5 feet of you. The + damage equals the number you roll on the Bardic Inspiration die. + + Mobile Flourish + You can expend one use of your Bardic InSpiration to + cause the weapon to deal extra damage to the target you hit. The damage + equals the number you roll on the Bardic Inspiration die. You can also push + the target up to 5 feet away from you, plus a number of feet equal to the + number you roll on that die. You can then immediately use your reaction to + move up to your walking speed to an unoccupied space within 5 feet of the + target. """ @@ -394,7 +397,8 @@ class BladeFlourish(Feature): class MastersFlourish(Feature): """Starting at 14th level, whenever you use a Blade Flourish option, you can - roll a d6 and use it instead of expend- ing a Bardic Inspiration die. + roll a d6 and use it instead of expending a Bardic Inspiration die. + """ name = "Master's Flourish" @@ -453,10 +457,10 @@ class WordsOfTerror(Feature): class MantleOfWhispers(Feature): """At 6th level, you gain the ability to adopt a humanoid's persona. When a humanoid dies within 30 feet of you, you can magically capture its shadow - using your reac- tion. You retain this shadow until you use it or you + using your reaction. You retain this shadow until you use it or you finish a long rest. You can use the shadow as an action. When you do so, it vanishes, magically transforming into a disguise that appears on you. You - now look like the dead person, but healthy and alive.This disguise lasts + now look like the dead person, but healthy and alive. This disguise lasts for 1 hour or until you end it as a bonus action. While you're in the disguise, you gain access to all information that the diff --git a/dungeonsheets/features/bloodhunter.py b/dungeonsheets/features/bloodhunter.py index 742a3451..aa81a9a4 100644 --- a/dungeonsheets/features/bloodhunter.py +++ b/dungeonsheets/features/bloodhunter.py @@ -2,13 +2,20 @@ from dungeonsheets.features.fighter import Archery, Dueling, GreatWeaponFighting, TwoWeaponFighting -#Blood Hunter +#Blood Hunter class HunterBane(Feature): - """Beginning at 1st level, you have survived the Hunter’s Bane, a dangerous, long-guarded ritual that alters your life’s blood, forever binding you to the darkness and honing your senses against it. You have advantage on Wisdom (Survival) checks to track fey, fiends, or undead, as well as on Intelligence ability checks to recall information about them. + """Beginning at 1st level, you have survived the Hunter’s Bane, a + dangerous, long-guarded ritual that alters your life’s blood, forever + binding you to the darkness and honing your senses against it. You have + advantage on Wisdom (Survival) checks to track fey, fiends, or undead, as + well as on Intelligence ability checks to recall information about them. -The Hunter’s Bane also empowers your body to control and shape hemocraft magic, using your own blood and life essence to fuel your abilities. Some of your features require your target to make a saving throw to resist the feature’s effects. The saving throw DC is calculated as follows: + The Hunter’s Bane also empowers your body to control and shape hemocraft + magic, using your own blood and life essence to fuel your abilities. Some of + your features require your target to make a saving throw to resist the + feature’s effects. The saving throw DC is calculated as follows: -Hemocraft save DC = 8 + your proficiency bonus + your Intelligence modifier. + Hemocraft save DC = 8 + your proficiency bonus + your Intelligence modifier. """ @@ -17,38 +24,75 @@ class HunterBane(Feature): class BloodMaledict(Feature): - """At 1st level, you gain the ability to channel, and sometimes sacrifice, a part of your vital essence to curse and manipulate creatures through hemocraft magic. You gain one blood curse of your choice, detailed in the “Blood Curses” section at the end of the class description. You learn one additional blood curse of your choice, and you can choose one of the blood curses you know and replace it with another blood curse, at 6th, 10th, 14th, and 18th level. + """At 1st level, you gain the ability to channel, and sometimes + sacrifice, a part of your vital essence to curse and manipulate creatures + through hemocraft magic. You gain one blood curse of your choice, detailed + in the “Blood Curses” section at the end of the class description. You learn + one additional blood curse of your choice, and you can choose one of the + blood curses you know and replace it with another blood curse, at 6th, 10th, + 14th, and 18th level. -When you use your Blood Maledict, you choose which curse to invoke. While invoking a blood curse, but before it affects the target, you can choose to amplify the curse by losing a number of hit points equal to one roll of your hemocraft die, as shown in the Hemocraft Die column of the Blood Hunter table. An amplified curse gains an additional effect, noted in the curse’s description. Creatures that do not have blood in their bodies are immune to blood curses, unless you have amplified the curse. + When you use your Blood Maledict, you choose which curse to invoke. While + invoking a blood curse, but before it affects the target, you can choose to + amplify the curse by losing a number of hit points equal to one roll of your + hemocraft die, as shown in the Hemocraft Die column of the Blood Hunter + table. An amplified curse gains an additional effect, noted in the curse’s + description. Creatures that do not have blood in their bodies are immune to + blood curses, unless you have amplified the curse. -You can use this feature once. Beginning at 6th level, you can use your Blood Maledict feature twice, at 13th level you can use it three times between rests, and at 17th level, you can use it four times between rests. You regain all expended uses when you finish a short or long rest. + You can use this feature once. Beginning at 6th level, you can use your + Blood Maledict feature twice, at 13th level you can use it three times + between rests, and at 17th level, you can use it four times between rests. + You regain all expended uses when you finish a short or long rest. """ name = "Blood Maledict" source = "Blood Hunter" + at_will_spells = () + + def cast_spell_at_will(self, spell): + s = spell() + s.level = 0 + if "M" in s.components: + c = list(s.components) + c.remove("M") + s.components = tuple(c) + self.spells_known += (s,) + self.spells_prepared += (s,) + + def __init__(self, owner): + super().__init__(owner) + for s in self.at_will_spells: + self.cast_spell_at_will(s) class BloodHunterFightingStyle(FeatureSelector): - """At 2nd level, you adopt a style of fighting as your specialty. Choose one of the following options. You can’t take a Fighting Style option more than once, even if you later get to choose again. -Archery + """At 2nd level, you adopt a style of fighting as your specialty. Choose + one of the following options. You can’t take a Fighting Style option more + than once, even if you later get to choose again. Archery -You gain a +2 bonus to attack rolls you make with ranged weapons. + You gain a +2 bonus to attack rolls you make with ranged weapons. -Dueling + Dueling -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. + 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. -Great Weapon Fighting + Great Weapon Fighting -When you roll a 1 or 2 on a non-rite damage die for an attack you make with a melee weapon that you are wielding with two hands, you can reroll the die and must use the new roll. The weapon must have the two-handed or versatile property for you to gain this benefit. + When you roll a 1 or 2 on a non-rite damage die for an attack you make with + a melee weapon that you are wielding with two hands, you can reroll the die + and must use the new roll. The weapon must have the two-handed or versatile + property for you to gain this benefit. -Two-Weapon Fighting + Two-Weapon Fighting -When you engage in two-weapon fighting, you can add your ability modifier to the damage of the second attack. + When you engage in two-weapon fighting, you can add your ability modifier to + the damage of the second attack. """ - + options = { "archery": Archery, "dueling": Dueling, @@ -63,18 +107,45 @@ class BloodHunterFightingStyle(FeatureSelector): class CrimsonRites(Feature): - """At 2nd level, you learn to invoke a rite of hemocraft within your weapon at the cost of your own vitality. Choose one rite from the Primal Rites list below to learn. + """At 2nd level, you learn to invoke a rite of hemocraft within your + weapon at the cost of your own vitality. Choose one rite from the Primal + Rites list below to learn. + + As a bonus action, you can activate a crimson rite on a single weapon with + the elemental energy of a known rite of your choice that lasts until you + finish a short or long rest, or if you aren’t holding the weapon at the end + of your turn. When you activate a rite, you lose a number of hit points + equal to one roll of your hemocraft die, as shown in the Hemocraft Die + column of the Blood Hunter table. -As a bonus action, you can activate a crimson rite on a single weapon with the elemental energy of a known rite of your choice that lasts until you finish a short or long rest, or if you aren’t holding the weapon at the end of your turn. When you activate a rite, you lose a number of hit points equal to one roll of your hemocraft die, as shown in the Hemocraft Die column of the Blood Hunter table. + For the duration, attacks from this weapon deal an additional 1d4 damage of + the chosen rite’s type. This damage is magical, and increases as you gain + levels as a blood hunter, as shown in the Hemocraft Die column of the Blood + Hunter table. A weapon can only hold a single active rite at a time. -For the duration, attacks from this weapon deal an additional 1d4 damage of the chosen rite’s type. This damage is magical, and increases as you gain levels as a blood hunter, as shown in the Hemocraft Die column of the Blood Hunter table. A weapon can only hold a single active rite at a time. + You learn an additional Primal Rite at 7th level, and access to an Esoteric + Rite at 14th level. -You learn an additional Primal Rite at 7th level, and access to an Esoteric Rite at 14th level. - """ - + name = "Crimson Rites" source = "Blood Hunter" + at_will_spells = () + + def cast_spell_at_will(self, spell): + s = spell() + s.level = 0 + if "M" in s.components: + c = list(s.components) + c.remove("M") + s.components = tuple(c) + self.spells_known += (s,) + self.spells_prepared += (s,) + + def __init__(self, owner): + super().__init__(owner) + for s in self.at_will_spells: + self.cast_spell_at_will(s) class ExtraAttackBloodHunter(Feature): @@ -88,18 +159,36 @@ class ExtraAttackBloodHunter(Feature): class BrandOfCastigation(Feature): - """At 6th level, whenever you damage a creature with your Crimson Rite feature, you can choose to sear an arcane brand of hemocraft magic into it (requires no action). You always know the direction to the branded creature, and each time the branded creature deals damage to you or a creature you can see within 5 feet of you, the creature takes psychic damage equal to your Intelligence modifier (minimum of 1 damage). + """At 6th level, whenever you damage a creature with your Crimson Rite + feature, you can choose to sear an arcane brand of hemocraft magic into it + (requires no action). You always know the direction to the branded creature, + and each time the branded creature deals damage to you or a creature you can + see within 5 feet of you, the creature takes psychic damage equal to your + Intelligence modifier (minimum of 1 damage). + + Your brand lasts until you dismiss it, or you apply a brand to another + creature. Your brand counts as a spell for the purposes of dispel magic, and + the spell level is equal to half of your blood hunter level (maximum of 9th + level spell). -Your brand lasts until you dismiss it, or you apply a brand to another creature. Your brand counts as a spell for the purposes of dispel magic, and the spell level is equal to half of your blood hunter level (maximum of 9th level spell). + Once you use this feature, you can’t use it again until you finish a short + or long rest. -Once you use this feature, you can’t use it again until you finish a short or long rest. - """ + name = "Brand of Castigation" + source = "Blood Hunter" class GrimPsychometry(Feature): - """When you reach 9th level, you have a supernatural talent for discerning the history surrounding mysterious objects or places touched by evil. When making an Intelligence (History) check to recall information about a darker past surrounding an object you are touching, or a location you are present in, you have advantage on the roll. The information gleaned often leans towards the more sinister influences of the past, and sometimes conveys visions of things previously unknown to the character on higher rolls. - + """When you reach 9th level, you have a supernatural talent for + discerning the history surrounding mysterious objects or places touched by + evil. When making an Intelligence (History) check to recall information + about a darker past surrounding an object you are touching, or a location + you are present in, you have advantage on the roll. The information gleaned + often leans towards the more sinister influences of the past, and sometimes + conveys visions of things previously unknown to the character on higher + rolls. + """ name = "Grim Psychometry" @@ -107,76 +196,69 @@ class GrimPsychometry(Feature): class DarkAugmentation(Feature): - """Upon reaching 10th level, arcane blood magic suffuses your body, permanently reinforcing your resilience. Your speed increases by 5 feet, and whenever you make a Strength, Dexterity, or Constitution saving throw, you gain a bonus to the saving throw equal to your Intelligence modifier (minimum of +1). - + """Upon reaching 10th level, arcane blood magic suffuses your body, + permanently reinforcing your resilience. Your speed increases by 5 feet, and + whenever you make a Strength, Dexterity, or Constitution saving throw, you + gain a bonus to the saving throw equal to your Intelligence modifier + (minimum of +1). + """ name = "Dark Augmentation" source = "Blood Hunter" - - + + class BrandOfTethering(Feature): - """Starting at 13th level, the psychic damage from your Brand of Castigation increases to twice your Intelligence modifier (minimum of 2 damage). + """Starting at 13th level, the psychic damage from your Brand of + Castigation increases to twice your Intelligence modifier (minimum of 2 + damage). + + In addition, a branded creature can’t take the Dash action, and if a + creature branded by you attempts to teleport or leave their current plane + via ability, spell, or portal, they take 4d6 psychic damage and must make a + Wisdom saving throw. On a failure, the teleport or plane shift fails. -In addition, a branded creature can’t take the Dash action, and if a creature branded by you attempts to teleport or leave their current plane via ability, spell, or portal, they take 4d6 psychic damage and must make a Wisdom saving throw. On a failure, the teleport or plane shift fails. - """ - + name = "Brand of Thethering" source = "Blood Hunter" - + class HardenedSoul(Feature): - """When you reach 14th level, you have advantage on saving throws against being charmed and frightened. - + """When you reach 14th level, you have advantage on saving throws + against being charmed and frightened. + """ - + name = "Hardened Soul" source = "Blood Hunter" class SanguineMastery(Feature): - """Upon becoming 20th level, you hone your control over blood magic, mitigating your sacrifice and empowering your capability. Once per turn, whenever a blood hunter feature requires you to roll a hemocraft die, you can choose to reroll the die and choose which result to use. + """Upon becoming 20th level, you hone your control over blood magic, + mitigating your sacrifice and empowering your capability. Once per turn, + whenever a blood hunter feature requires you to roll a hemocraft die, you + can choose to reroll the die and choose which result to use. + + In addition, whenever you score a critical hit with a weapon attack + empowered by your Crimson Rite, you regain one expended use of your Blood + Maledict feature. -In addition, whenever you score a critical hit with a weapon attack empowered by your Crimson Rite, you regain one expended use of your Blood Maledict feature. - """ - + name = "Sanguine Mastery" source = "Blood Hunter" - - -# All Rites -class Rites(Feature): - """ - A generic Rite. Add details in features/bloodhunter.py - """ - name = "Unnamed rite" - source = "BloodHunter (Crimson Rites)" - at_will_spells = () - - def cast_spell_at_will(self, spell): - s = spell() - s.level = 0 - if "M" in s.components: - c = list(s.components) - c.remove("M") - s.components = tuple(c) - self.spells_known += (s,) - self.spells_prepared += (s,) - def __init__(self, owner): - super().__init__(owner) - for s in self.at_will_spells: - self.cast_spell_at_will(s) +# All Rites +Rites = CrimsonRites class RiteOfTheFlame(Rites): """Your rite damage is fire damage. - + """ - + name = "Rite of the Flame" @@ -184,842 +266,1049 @@ class RiteOfTheFrozen(Rites): """Your rite damage is cold damage. """ - + name = "Rite of the Frozen" - + class RiteOfTheStorm(Rites): """Your rite damage is lightning damage. - - """ - + + """ + name = "Rite of the Storm" - + class RiteOfTheDead(Rites): """Your rite damage is necrotic damage - + **Prerequisite: 14th level** - + """ - + name = "Rite of the Dead" - + class RiteOfTheOracle(Rites): """Your rite damage is psychic damage - + **prerequisite: 14th level** - + """ - + name = "Rite of the Oracle" class RiteOfTheRoar(Rites): """Your rite damage is thunder damage - + **Prerequisite: 14th level** - - """ - - name = "Rite of the Roar" - -#Blood Curses -class BloodCurses(Feature): - """ - A generic BloodCurse. Add details in features/bloodhunter.py """ - name = "Unnamed Curse" - source = "BloodHunter (Blood Maledict)" - at_will_spells = () + name = "Rite of the Roar" - def cast_spell_at_will(self, spell): - s = spell() - s.level = 0 - if "M" in s.components: - c = list(s.components) - c.remove("M") - s.components = tuple(c) - self.spells_known += (s,) - self.spells_prepared += (s,) - def __init__(self, owner): - super().__init__(owner) - for s in self.at_will_spells: - self.cast_spell_at_will(s) +#Blood Curses +BloodCurses = BloodMaledict + +class BloodCurseOfTheAnxious(BloodCurses): + """As a bonus action, you magnify the adrenaline in the body of a + creature within 30 feet of you, making them susceptible to forceful + influence. Until the end of your next turn, all creatures have advantage on + Charisma (Intimidation) checks directed at the target creature. -class BloodCurseoftheAnxious(BloodCurses): - """As a bonus action, you magnify the adrenaline in the body of a creature within 30 feet of you, making them susceptible to forceful influence. Until the end of your next turn, all creatures have advantage on Charisma (Intimidation) checks directed at the target creature. + Amplify. The next Wisdom saving throw the target makes before this curse + ends has disadvantage. Once you’ve amplified this blood curse, you must + finish a long rest before you can amplify it again. -Amplify. The next Wisdom saving throw the target makes before this curse ends has disadvantage. Once you’ve amplified this blood curse, you must finish a long rest before you can amplify it again. - """ - + name = "Blood Curse of the Anxious" - - -class BloodCurseofBinding(BloodCurses): - """As a bonus action, you can attempt to bind a creature you can see within 30 feet of you that is no more than one size larger than you. The target must succeed on a Strength saving throw or have their speed be reduced to 0 and they can’t use reactions until the end of your next turn. -Amplify. This curse lasts for 1 minute and can affect a creature regardless of their size. At the end of each of its turns, the cursed creature can make another Strength saving throw. On a success, this curse ends. - + +class BloodCurseOfBinding(BloodCurses): + """As a bonus action, you can attempt to bind a creature you can see + within 30 feet of you that is no more than one size larger than you. The + target must succeed on a Strength saving throw or have their speed be + reduced to 0 and they can’t use reactions until the end of your next turn. + + Amplify. This curse lasts for 1 minute and can affect a creature regardless + of their size. At the end of each of its turns, the cursed creature can make + another Strength saving throw. On a success, this curse ends. + """ - - name = "Blood Curse of Binding" + + name = "Blood Curse of Binding" class BloodCurseOfBloatedAgony(BloodCurses): - """As a bonus action, you curse a creature that you can see within 30 feet of you to painfully swell until the end of your next turn. For the duration of this curse, the creature has disadvantage on Strength and Dexterity ability checks, and suffers 1d8 necrotic damage if it makes more than one melee or ranged attack during its turn. + """As a bonus action, you curse a creature that you can see within 30 + feet of you to painfully swell until the end of your next turn. For the + duration of this curse, the creature has disadvantage on Strength and + Dexterity ability checks, and suffers 1d8 necrotic damage if it makes more + than one melee or ranged attack during its turn. + + Amplify. This curse lasts for 1 minute. At the end of each of its turns, the + cursed creature can make a Constitution saving throw. On a success, this + curse ends. -Amplify. This curse lasts for 1 minute. At the end of each of its turns, the cursed creature can make a Constitution saving throw. On a success, this curse ends. - """ - + name = "Blood Curse of Bloated Agony" class BloodCurseOfCorrosion(BloodCurses): """**Prerequisite: 15th level, Order of the Mutant** -As a bonus action, a creature within 30 feet of you becomes poisoned. At the end of each of its turns, the target can make another Constitution saving throw. On a success, the curse ends. + Starting at 15th level, your blood curse can wrack a creature’s + body with terrible toxins. You gain the Blood Curse of Corrosion for your + Blood Maledict feature. This does not count against your number of blood + curses known. + + As a bonus action, a creature within 30 feet of you becomes poisoned. At the + end of each of its turns, the target can make another Constitution saving + throw. On a success, the curse ends. + + Amplify. The cursed creature suffers 4d6 necrotic damage, and suffers this + damage again every time it fails its Constitution saving throw to end this + curse at the end of its turn. -Amplify. The cursed creature suffers 4d6 necrotic damage, and suffers this damage again every time it fails its Constitution saving throw to end this curse at the end of its turn. - """ - + name = "Blood Curse of Corrosion" + source = "Blood Hunter (Order of the Mutant)" class BloodCurseOfTheExorcist(BloodCurses): """**Prerequisite: 15th level, Order of the Ghostslayer** -As a bonus action, you can choose one creature you can see within 30 feet of you that is charmed, frightened, or possessed. The target creature is no longer charmed, frightened, or possessed. + At 15th level, you’ve honed your hemocraft to tear wicked influence + from your allies, punishing those who would infiltrate their body and mind. + You gain the Blood Curse of the Exorcist for your Blood Maledict feature. + This doesn’t count against your number of blood curses known. + + As a bonus action, you can choose one creature you can see within 30 feet of + you that is charmed, frightened, or possessed. The target creature is no + longer charmed, frightened, or possessed. + + Amplify. The creature that charmed, frightened, or possessed the target of + your curse suffers 3d6 psychic damage and must make a Wisdom saving throw or + be stunned until the end of your next turn. -Amplify. The creature that charmed, frightened, or possessed the target of your curse suffers 3d6 psychic damage and must make a Wisdom saving throw or be stunned until the end of your next turn. - """ - + name = "Blood Curse of the Exorcist" + source = "Blood Hunter (Order of the Ghostslayer)" + class BloodCurseOfExposure(BloodCurses): - """When a creature you can see within 30 feet is hit by an attack or spell, you can use your reaction to temporarily weaken their resilience against it. Until the end of the turn, the target loses resistance to the damage types of the triggering attack or spell. + """When a creature you can see within 30 feet is hit by an attack or + spell, you can use your reaction to temporarily weaken their resilience + against it. Until the end of the turn, the target loses resistance to the + damage types of the triggering attack or spell. + + Amplify. The target instead loses invulnerability to the damage types of the + triggering attack or spell, having resistance to them until the end of the + turn. -Amplify. The target instead loses invulnerability to the damage types of the triggering attack or spell, having resistance to them until the end of the turn. - """ - + name = "Blood Curse of Exposure" - + class BloodCurseOfTheEyeless(BloodCurses): - """When a creature you can see within 30 feet of you makes an attack roll, you can use your reaction to roll one hemocraft die and subtract the number rolled from the creature’s attack roll. You can choose to use this feature after the creature’s roll, but before the DM determines whether the attack roll succeeds. The creature is immune if it is immune to blindness. + """When a creature you can see within 30 feet of you makes an attack + roll, you can use your reaction to roll one hemocraft die and subtract the + number rolled from the creature’s attack roll. You can choose to use this + feature after the creature’s roll, but before the DM determines whether the + attack roll succeeds. The creature is immune if it is immune to blindness. + + Amplify. You apply this curse to all of the creature’s attack rolls until + the end of the turn. You roll a new hemocraft die for each affected attack. -Amplify. You apply this curse to all of the creature’s attack rolls until the end of the turn. You roll a new hemocraft die for each affected attack. - """ - - name = "Blood Curse of Exposure" - + + name = "Blood Curse of the Eyeless" + class BloodCurseOfTheFallenPuppet(BloodCurses): - """When a creature you can see within 30 feet of you drops to 0 hit points, you can use your reaction to give that creature a final act of aggression. That creature immediately makes a single weapon attack against a target of your choice within its attack range. + """When a creature you can see within 30 feet of you drops to 0 hit + points, you can use your reaction to give that creature a final act of + aggression. That creature immediately makes a single weapon attack against a + target of your choice within its attack range. + + Amplify. You can first move the cursed creature up to half their speed, and + you grant a bonus to the cursed creature’s attack roll equal to your + Intelligence modifier (minimum of +1). -Amplify. You can first move the cursed creature up to half their speed, and you grant a bonus to the cursed creature’s attack roll equal to your Intelligence modifier (minimum of +1). - """ - + name = "Blood Curse of the Fallen Puppet" - -class VloodCurseOfTheHowl(BloodCurses): + +class BloodCurseOfTheHowl(BloodCurses): """**Prerequisite: 18th level, Order of the Lycan** -As an action, you unleash a blood-curdling howl. Each creature within 30 feet of you that can hear you must succeed on a Wisdom saving throw or become frightened of you until the end of your next turn. If they fail their saving throw by 5 or more, they are stunned while frightened in this way. A creature that succeeds on this saving throw is immune to this blood curse for the next 24 hours. + As an action, you unleash a blood-curdling howl. Each creature within 30 + feet of you that can hear you must succeed on a Wisdom saving throw or + become frightened of you until the end of your next turn. If they fail their + saving throw by 5 or more, they are stunned while frightened in this way. A + creature that succeeds on this saving throw is immune to this blood curse + for the next 24 hours. + + You can choose any number of creatures you can see to be unaffected by the + howl. -You can choose any number of creatures you can see to be unaffected by the howl. + Amplify. The range of this curse increases to 60 feet. -Amplify. The range of this curse increases to 60 feet. - """ - + name = "Blood Curse of the Howl" class BloodCurseOfTheMarked(BloodCurses): - """As a bonus action, you can mark a creature that you can see within 30 feet of you. Until the end of your turn, whenever you deal rite damage to the target, you roll an additional hemocraft die of rite damage. + """As a bonus action, you can mark a creature that you can see within 30 + feet of you. Until the end of your turn, whenever you deal rite damage to + the target, you roll an additional hemocraft die of rite damage. + + Amplify. The next attack roll you make against the target before the end of + your turn has advantage. -Amplify. The next attack roll you make against the target before the end of your turn has advantage. - """ - + name = "Blood Curse of the Marked" - + class BloodCurseOfTheMuddledMind(BloodCurses): - """As a bonus action, you curse a creature that you can see within 30 feet of you that is concentrating on a spell. That creature has disadvantage on the next Constitution saving throw it must make to maintain concentration before the end of your next turn. + """As a bonus action, you curse a creature that you can see within 30 + feet of you that is concentrating on a spell. That creature has disadvantage + on the next Constitution saving throw it must make to maintain concentration + before the end of your next turn. + + Amplify. The cursed creature has disadvantage on all Constitution saving + throws made to maintain concentration of spells until the end of your next + turn. + + """ -Amplify. The cursed creature has disadvantage on all Constitution saving throws made to maintain concentration of spells until the end of your next turn. - - """ - name = "Blood Curse of the Muddled Mind" class BloodCurseOfTheSouleater(BloodCurses): """**Prerequisite: 18th level, Order of the Profane Soul** -When a creature that isn’t a construct or undead is reduced to 0 hit points within 30 feet of you, you can use your reaction to usher their soul to your patron in exchange for power. Until the end of your next turn, your weapon attacks have advantage. + Starting at 18th level, you’ve learned to siphon the soul from your + fallen prey. You gain the Blood Curse of the Souleater for your Blood + Maledict feature. This does not count against your number of blood curses + known. + + When a creature that isn’t a construct or undead is reduced to 0 hit points + within 30 feet of you, you can use your reaction to usher their soul to your + patron in exchange for power. Until the end of your next turn, your weapon + attacks have advantage. + + Amplify. In addition, you regain an expended warlock spell slot. Once you’ve + amplified this blood curse, you must finish a long rest before you can + amplify it again + + """ -Amplify. In addition, you regain an expended warlock spell slot. Once you’ve amplified this blood curse, you must finish a long rest before you can amplify it again - - """ - name = "Blood Curse of the Souleater" + source = "Blood Hunter (Order of the Profane Soul)" #Order of the Ghostslayer class CurseSpecialist(Feature): - """Beginning at 3rd level, your ancient order teaches advanced mastery over blood curses. You gain an additional use of your Blood Maledict feature. In addition, your blood curses can target any creature, whether it has blood or not. - + """Beginning at 3rd level, your ancient order teaches advanced mastery + over blood curses. You gain an additional use of your Blood Maledict + feature. In addition, your blood curses can target any creature, whether it + has blood or not. + """ - + name = "Curse Specialist" source = "Blood Hunter (Order of the Ghostslayer)" class RiteOfTheDawn(Rites): - """When you join this order at 3rd level, you learn the Rite of the Dawn esoteric rite (detailed below). + """When you join this order at 3rd level, you learn the Rite of the Dawn + esoteric rite (detailed below). -Rite of the Dawn. Your rite damage is radiant damage. While the rite is active, you gain the following benefits: + Rite of the Dawn. Your rite damage is radiant damage. While the rite is + active, you gain the following benefits: - Your weapon sheds bright light out to a radius of 20 feet. - You have resistance to necrotic damage. - Your weapon deals one additional hemocraft die of rite damage when you hit an undead + Your weapon sheds bright light out to a radius of 20 feet. You have + resistance to necrotic damage. Your weapon deals one additional hemocraft + die of rite damage when you hit an undead """ - + name = "Rite of the Dawn" source = "Blood Hunter (Order of the Ghostslayer)" class EtherealStep(Feature): - """Upon reaching 7th level, at the start of your turn, if you aren’t incapacitated, you can choose to magically step into the veil between the planes. + """Upon reaching 7th level, at the start of your turn, if you aren’t + incapacitated, you can choose to magically step into the veil between the + planes. + + You can move through other creatures and objects as if they were difficult + terrain, as well as see and affect creatures and objects on the Ethereal + Plane. You take 1d10 force damage if you end your turn inside an object. If + you are inside an object when this feature ends, you are immediately shunted + to the nearest unoccupied space that you can occupy and take force damage + equal to twice the number of feet you moved. This feature lasts for a number + of rounds equal to your Intelligence modifier (minimum of 1 round). -You can move through other creatures and objects as if they were difficult terrain, as well as see and affect creatures and objects on the Ethereal Plane. You take 1d10 force damage if you end your turn inside an object. If you are inside an object when this feature ends, you are immediately shunted to the nearest unoccupied space that you can occupy and take force damage equal to twice the number of feet you moved. This feature lasts for a number of rounds equal to your Intelligence modifier (minimum of 1 round). + You can use this feature once. Beginning at 15th level, you can use your + Ethereal Step feature twice between rests. You regain all expended uses when + you finish a short or long rest. -You can use this feature once. Beginning at 15th level, you can use your Ethereal Step feature twice between rests. You regain all expended uses when you finish a short or long rest. - """ - + name = "Ethereal Step" source = "Blood Hunter (Order of the Ghostslayer)" - - + + class BrandOfSundering(Feature): - """Beginning at 11th level, your Brand of Castigation now exposes a fragment of your foe’s essence, leaving them vulnerable to your Crimson Rite. Whenever you damage a branded creature with your Crimson Rite, your weapon deals one additional hemocraft die of rite damage. In addition, the branded creature can’t move through creatures or objects. - + """Beginning at 11th level, your Brand of Castigation now exposes a + fragment of your foe’s essence, leaving them vulnerable to your Crimson + Rite. Whenever you damage a branded creature with your Crimson Rite, your + weapon deals one additional hemocraft die of rite damage. In addition, the + branded creature can’t move through creatures or objects. + """ - + name = "Brand of Sundering" - source = "Blood HUnter (Order of the Ghostslayer)" - - -class BloodCurseOfTheExorcist(Feature): - """At 15th level, you’ve honed your hemocraft to tear wicked influence from your allies, punishing those who would infiltrate their body and mind. You gain the Blood Curse of the Exorcist for your Blood Maledict feature. This doesn’t count against your number of blood curses known. - - """ - - name = "Blood Curse of the Exorcist" - source = "Blood Hunter (Order of the Ghostslayer" - - + source = "Blood Hunter (Order of the Ghostslayer)" + + class RiteRevival(Feature): - """Upon reaching 18th level, you learn to protect your fading life by absorbing your blood rite. When you are reduced to 0 hit points while you have an active Crimson Rite, but don’t die outright, the rite ends and you drop to 1 hit point instead. If you have rites active on multiple weapons, you choose which one ends. - + """Upon reaching 18th level, you learn to protect your fading life by + absorbing your blood rite. When you are reduced to 0 hit points while you + have an active Crimson Rite, but don’t die outright, the rite ends and you + drop to 1 hit point instead. If you have rites active on multiple weapons, + you choose which one ends. + """ - + name = "Revival" source = "Blood Hunter (Order of the Ghostslayer)" - - + + #Order of the Lycan class HeightenedSenses(Feature): - """Starting when you choose this archetype at 3rd level, you begin to adopt the improved abilities of a natural predator. You gain advantage on Wisdom (Perception) checks that rely on hearing or smell. - + """Starting when you choose this archetype at 3rd level, you begin to + adopt the improved abilities of a natural predator. You gain advantage on + Wisdom (Perception) checks that rely on hearing or smell. + """ - + name = "Revival" source = "Blood Hunter (Order of the Lycan)" - - + + class HybridTransformation(Feature): - """Upon choosing this archetype at 3rd level, you begin to learn to control the lycanthropic curse that now lives in your blood. As a bonus action, you can transform into your hybrid form for up to 1 hour. You can speak, use equipment, and wear armor in this form. You can revert to your normal form earlier as a bonus action. You automatically revert to your normal form if you fall unconscious, drop to 0 hit points, or die. This feature replaces the rules for Lycanthropy within the Monster’s Manual. + """Upon choosing this archetype at 3rd level, you begin to learn to + control the lycanthropic curse that now lives in your blood. As a bonus + action, you can transform into your hybrid form for up to 1 hour. You can + speak, use equipment, and wear armor in this form. You can revert to your + normal form earlier as a bonus action. You automatically revert to your + normal form if you fall unconscious, drop to 0 hit points, or die. This + feature replaces the rules for Lycanthropy within the Monster’s Manual. + + Once you use this feature, you must finish a short or long rest before you + can use it again. -Once you use this feature, you must finish a short or long rest before you can use it again. + While you are transformed, you gain the following features: -While you are transformed, you gain the following features: + Feral Might. You gain a +1 to melee damage rolls. This bonus increases by 1 + at 11th and 18th level. You also have advantage on Strength checks and + Strength saving throws. -Feral Might. You gain a +1 to melee damage rolls. This bonus increases by 1 at 11th and 18th level. You also have advantage on Strength checks and Strength saving throws. + Resilient Hide. You have resistance to bludgeoning, piercing, and slashing + damage from non-magical attacks not made with silver weapons. While you are + not wearing heavy armor, you gain a +1 bonus to your AC. -Resilient Hide. You have resistance to bludgeoning, piercing, and slashing damage from nonmagical attacks not made with silver weapons. While you are not wearing heavy armor, you gain a +1 bonus to your AC. + Predatory Strikes. You can apply your Crimson Rite feature to your unarmed + strikes as a single weapon. You can use Dexterity instead of Strength for + the attack and damage rolls of your unarmed strikes. When you use the Attack + action with an unarmed strike, you can make one unarmed strike as a bonus + action. -Predatory Strikes. You can apply your Crimson Rite feature to your unarmed strikes as a single weapon. You can use Dexterity instead of Strength for the attack and damage rolls of your unarmed strikes. When you use the Attack action with an unarmed strike, you can make one unarmed strike as a bonus action. + Your unarmed strikes deal 1d6 slashing damage. The damage increases to 1d8 + at 11th level. -Your unarmed strikes deal 1d6 slashing damage. The damage increases to 1d8 at 11th level. + Bloodlust. If you begin your turn with no more than half of your maximum hit + points, you must succeed on a DC 8 Wisdom saving throw or move directly + towards the nearest creature to you and use the Attack action against that + creature. You can choose whether or not to use your Extra Attack feature for + this frenzied attack. If there is more than one possible target, roll to + randomly determine the target. You then regain control for the remainder of + your turn. -Bloodlust. If you begin your turn with no more than half of your maximum hit points, you must succeed on a DC 8 Wisdom saving throw or move directly towards the nearest creature to you and use the Attack action against that creature. You can choose whether or not to use your Extra Attack feature for this frenzied attack. If there is more than one possible target, roll to randomly determine the target. You then regain control for the remainder of your turn. + If you are under an effect that prevents you from concentrating (like the + barbarian’s Rage feature), you automatically fail this saving throw. -If you are under an effect that prevents you from concentrating (like the barbarian’s Rage feature), you automatically fail this saving throw. - """ - + name = "Hybrid Transformation" source = "Blood Hunter (Order of the Lycan)" - - + + class StalkerProwess(Feature): - """At 7th level, your speed increases by 10 feet. You also can add 10 feet to your long jump distance and 3 feet to your high jump distance. In addition, your hybrid form gains the Improved Predatory Strikes feature. + """At 7th level, your speed increases by 10 feet. You also can add 10 + feet to your long jump distance and 3 feet to your high jump distance. In + addition, your hybrid form gains the Improved Predatory Strikes feature. + + Improved Predatory Strikes. You gain a +1 bonus to attack rolls made with + your unarmed strikes. This bonus increases by 1 at 11th level (+2) and 18th + level (+3). In addition, when you have an active Crimson Rite while in your + hybrid form, your unarmed strikes are considered magical for the purpose of + overcoming resistance and immunity to non-magical attacks and damage. -Improved Predatory Strikes. You gain a +1 bonus to attack rolls made with your unarmed strikes. This bonus increases by 1 at 11th level (+2) and 18th level (+3). In addition, when you have an active Crimson Rite while in your hybrid form, your unarmed strikes are considered magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage. - """ - + name = "Stalker Prowess" source = "Blood Hunter (Order of the Lycan)" - - + + class AdvancedTrasformation(Feature): - """Starting at 11th level, you learn to unleash and control more of the beast within. You can use your Hybrid Transformation feature twice, regaining all expended uses when you finish a short or long rest. In addition, your hybrid form gains the Lycan Regeneration feature. + """Starting at 11th level, you learn to unleash and control more of the + beast within. You can use your Hybrid Transformation feature twice, + regaining all expended uses when you finish a short or long rest. In + addition, your hybrid form gains the Lycan Regeneration feature. + + Lycan Regeneration. At the start of each of your turns, before you roll for + bloodlust, you regain hit points equal to 1 + your Constitution modifier + (minimum of one) if you have at least 1 hit point and no more than half of + your hit points left. -Lycan Regeneration. At the start of each of your turns, before you roll for bloodlust, you regain hit points equal to 1 + your Constitution modifier (minimum of one) if you have at least 1 hit point and no more than half of your hit points left. - """ - + name = "Advanced Transformation" source = "Blood Hunter (Order of the Lycan)" - - + + class BrandOfTheVoracious(Feature): - """At 15th level, you have advantage on your Wisdom saving throws to maintain control of your bloodlust in hybrid form. In addition, your Brand of Castigation now binds your foe to your hunter’s thirst for savagery. While in your hybrid form, your attacks have advantage against a creature branded by you. - + """At 15th level, you have advantage on your Wisdom saving throws to + maintain control of your bloodlust in hybrid form. In addition, your Brand + of Castigation now binds your foe to your hunter’s thirst for savagery. + While in your hybrid form, your attacks have advantage against a creature + branded by you. + """ - + name = "Brand of the Voracious" source = "Blood Hunter (Order of the Lycan)" - - + + class HybridTrasformationMastery(Feature): - """At 18th level, you have wrestled your inner predator and mastered it. You can use your Hybrid Transformation feature an unlimited number of times, and your hybrid form can now last indefinitely. + """At 18th level, you have wrestled your inner predator and mastered it. + You can use your Hybrid Transformation feature an unlimited number of times, + and your hybrid form can now last indefinitely. + + You also gain the Blood Curse of the Howl for your Blood Maledict feature. + This does not count against your number of blood curses known. -You also gain the Blood Curse of the Howl for your Blood Maledict feature. This does not count against your number of blood curses known. - """ - + name = "Hybrid Transformation Mastery" source = "Blood Hunter (Order of the Lycan)" - + #Order of the Mutant class Formulas(Feature): - """You begin to uncover forbidden alchemical formulas that temporarily alter your mental and physical abilities. + """You begin to uncover forbidden alchemical formulas that temporarily + alter your mental and physical abilities. + + Beginning at 3rd level, you choose to learn four mutagen formulas. Your + formula options are detailed at the end of this order description. You + gain an additional formula at 7th level, 11th level, 15th level, and 18th + level. -Beginning at 3rd level, you choose to learn four mutagen formulas. Your formula options are detailed at the end of this order description. You gain an additional formula at 7th level, 11th level, 15th level, and 18th level. + Additionally, when you gain a new mutagen formula, you can choose one of + the formulas you already know and replace it with a new mutagen formula. -Additionally, when you gain a new mutagen formula, you can choose one of the formulas you already know and replace it with a new mutagen formula. - """ - + name = "Formulas" source = "Blood Hunter (Order of the Mutant)" - - + at_will_spells = () + + def cast_spell_at_will(self, spell): + s = spell() + s.level = 0 + if "M" in s.components: + c = list(s.components) + c.remove("M") + s.components = tuple(c) + self.spells_known += (s,) + self.spells_prepared += (s,) + + def __init__(self, owner): + super().__init__(owner) + for s in self.at_will_spells: + self.cast_spell_at_will(s) + + class Mutagencraft(Feature): - """At 3rd level, you can concoct a single mutagen when you finish a short or long rest. Starting at 7th level, the number of mutagens you can create when you finish a rest increases to two, and at 15th level, you can now create three mutagens. + """At 3rd level, you can concoct a single mutagen when you finish a + short or long rest. Starting at 7th level, the number of mutagens you can + create when you finish a rest increases to two, and at 15th level, you can + now create three mutagens. + + As a bonus action you can consume a single mutagen, and the effects and + side effects last until you finish a short or long rest, unless otherwise + specified. While one or more mutagens are affecting you, you can use an + action to focus and flush the toxins from your system, ending the effects + and side effects of all mutagens. -As a bonus action you can consume a single mutagen, and the effects and side effects last until you finish a short or long rest, unless otherwise specified. While one or more mutagens are affecting you, you can use an action to focus and flush the toxins from your system, ending the effects and side effects of all mutagens. + Mutagens are designed for your biology and have no effect on other + creatures. They are also unstable by nature, losing their potency over + time and becoming inert if not used before you finish your next short or + long rest. -Mutagens are designed for your biology and have no effect on other creatures. They are also unstable by nature, losing their potency over time and becoming inert if not used before you finish your next short or long rest. - """ - + name = "Mutagencraft" source = "Blood Hunter (Order of the Mutant)" - - + + class StrangeMetabolism(Feature): - """Beginning at 7th level, your body has begun to adapt to toxins and venoms, ignoring their corroding effects. You gain immunity to poison damage and the poisoned condition. + """Beginning at 7th level, your body has begun to adapt to toxins and + venoms, ignoring their corroding effects. You gain immunity to poison + damage and the poisoned condition. -In addition, you can instill a burst of adrenaline to temporarily resist the negative effects of a mutagen. As a bonus action, you can choose to ignore the side effect of a mutagen affecting you for 1 minute. + In addition, you can instill a burst of adrenaline to temporarily resist + the negative effects of a mutagen. As a bonus action, you can choose to + ignore the side effect of a mutagen affecting you for 1 minute. + + Once you use this feature to resist side effects, you can’t do so again + until you finish a long rest. -Once you use this feature to resist side effects, you can’t do so again until you finish a long rest. - """ - + name = "Strange Metabolism" source = "Blood Hunter (Order of the Mutant)" class BrandOfAxiom(Feature): - """At 11th level, your hemocraft has altered your Brand of Castigation to enforce a foe’s true nature. Any illusions disguising or making a creature invisible when you brand them end, and they can’t benefit from such illusions while branded. If a creature branded by you is polymorphed or has changed shape, they must succeed on a Wisdom saving throw or revert to their true form and be stunned until the end of your next turn. Whenever a branded creature attempts to polymorph or change shape, they must succeed on a Wisdom saving throw or the attempt fails, and they are stunned until the end of your next turn. - + """At 11th level, your hemocraft has altered your Brand of Castigation + to enforce a foe’s true nature. Any illusions disguising or making a + creature invisible when you brand them end, and they can’t benefit from + such illusions while branded. If a creature branded by you is polymorphed + or has changed shape, they must succeed on a Wisdom saving throw or revert + to their true form and be stunned until the end of your next turn. + Whenever a branded creature attempts to polymorph or change shape, they + must succeed on a Wisdom saving throw or the attempt fails, and they are + stunned until the end of your next turn. + """ - + name = "Brand of Axiom" source = "Blood Hunter (Order of the Mutant)" - - -class BloodCurseOfCorrosion(Feature): - """Starting at 15th level, your blood curse can wrack a creature’s body with terrible toxins. You gain the Blood Curse of Corrosion for your Blood Maledict feature. This does not count against your number of blood curses known. - - """ - - name = "Blood Curse of Corrosion" - source = "Blood Hunter (Order of the Mutant)" - - + + class ExaltedMutation(Feature): - """At 18th level, your body has adapted to produce your toxins naturally in a moment of need. As a bonus action, you can choose one mutagen currently affecting you to flush from your system and end, then immediately have a mutagen you know the formula for take effect in its place. + """At 18th level, your body has adapted to produce your toxins + naturally in a moment of need. As a bonus action, you can choose one + mutagen currently affecting you to flush from your system and end, then + immediately have a mutagen you know the formula for take effect in its + place. + + You can use this feature a number of times equal to your Intelligence + modifier (minimum of 1). You regain all uses of this feature after you + finish a long rest. -You can use this feature a number of times equal to your Intelligence modifier (minimum of 1). You regain all uses of this feature after you finish a long rest. - """ - + name = "Exalted Mutation" source = "Blood Hunter (Order of the Mutant)" - - -#Formulas -class Formulas(Feature): - """ - A generic Formula. Add details in features/bloodhunter.py - """ - name = "Unnamed rite" - source = "BloodHunter (Crimson Rites)" - at_will_spells = () - def cast_spell_at_will(self, spell): - s = spell() - s.level = 0 - if "M" in s.components: - c = list(s.components) - c.remove("M") - s.components = tuple(c) - self.spells_known += (s,) - self.spells_prepared += (s,) - - def __init__(self, owner): - super().__init__(owner) - for s in self.at_will_spells: - self.cast_spell_at_will(s) - - +#Formulas class Aether(Formulas): """**Prerequisite: 11th level.** -You gain a flying speed of 20 feet for 1 hour. -Side effect. You have disadvantage on Strength and Dexterity ability checks for 1 hour. - + You gain a flying speed of 20 feet for 1 hour. + Side effect. You have disadvantage on Strength and Dexterity ability + checks for 1 hour. + """ - + name = "Aether" - + class Alluring(Formulas): - """Your skin and voice become malleable, allowing you to slightly enhance your appearance and presence. You have advantage on Charisma ability checks. -Side effect. You have disadvantage on initiative rolls. - + """Your skin and voice become malleable, allowing you to slightly + enhance your appearance and presence. You have advantage on Charisma + ability checks. Side effect. You have disadvantage on initiative rolls. + """ - + name = "Alluring" - - + + class Celerity(Formulas): - """Your Dexterity score increases by 3, as does your Dexterity maximum. This bonus increases by 1 at 11th and 18th level. -Side effect. You have disadvantage on Wisdom saving throws. - + """Your Dexterity score increases by 3, as does your Dexterity + maximum. This bonus increases by 1 at 11th and 18th level. Side effect. + You have disadvantage on Wisdom saving throws. + """ - + name = "Celerity" - + class Conversant(Formulas): """You gain advantage on Intelligence ability checks. -Side effect. You have disadvantage on Wisdom ability checks. - + Side effect. You have disadvantage on Wisdom ability checks. + """ - + name = "Conversant" - - + + class Cruelty(Formulas): """**Prerequisite: 11th level.** -When you use the Attack action, you can make an additional weapon attack as a bonus action. -Side effect. You have disadvantage on Intelligence, Wisdom, and Charisma saving throws. - + When you use the Attack action, you can make an additional weapon attack + as a bonus action. Side effect. You have disadvantage on Intelligence, + Wisdom, and Charisma saving throws. + """ - + name = "Cruelty" - - + + class Deftness(Formulas): """You gain advantage on Dexterity ability checks. -Side effect. You have disadvantage on Wisdom ability checks. - + Side effect. You have disadvantage on Wisdom ability checks. + """ - + name = "Deftness" - - + + class Embers(Formulas): """You gain resistance to fire damage. -Side effect. You gain vulnerability to cold damage. - + Side effect. You gain vulnerability to cold damage. + """ - + name = "Embers" - - + + class Gelid(Formulas): """You gain resistance to cold damage. -Side effect. You gain vulnerability to fire damage. + Side effect. You gain vulnerability to fire damage. """ - + name = "Gelid" - - + + class Impermeable(Formulas): """You gain resistance to piercing damage. -Side effect. You gain vulnerability to slashing damage. - + Side effect. You gain vulnerability to slashing damage. + """ - + name = "Impermeable" - - + + class Mobility(Formulas): - """You gain immunity to the grappled and restrained conditions. At 11th level, you also are immune to the paralyzed condition. -Side effect. You have disadvantage on Strength ability checks. - + """You gain immunity to the grappled and restrained conditions. At + 11th level, you also are immune to the paralyzed condition. Side effect. + You have disadvantage on Strength ability checks. + """ - + name = "Mobility" - - + + class Nighteye(Formulas): - """You gain darkvision for up to 60 feet. If you already have darkvision, this increases its range by 60 additional feet. -Side effect. You gain sunlight sensitivity (detailed in the Dark Elf section of the Player’s Handbook). - + """You gain darkvision for up to 60 feet. If you already have + darkvision, this increases its range by 60 additional feet. Side effect. + You gain sunlight sensitivity (detailed in the Dark Elf section of the + Player’s Handbook). + """ - + name = "Nighteye" - - + + class Percipient(Formulas): """You gain advantage on Wisdom ability checks. -Side effect. You have disadvantage on Charisma ability checks. - + Side effect. You have disadvantage on Charisma ability checks. + """ - + name = "Percipient" - - + + class Potency(Formulas): - """Your Strength score increases by 3, as does your Strength maximum. This bonus increases by 1 at 11th and 18th level. -Side effect. You have disadvantage on Dexterity saving throws. - + """Your Strength score increases by 3, as does your Strength maximum. + This bonus increases by 1 at 11th and 18th level. Side effect. You have + disadvantage on Dexterity saving throws. + """ - + name = "Potency" - - + + class Precision(Formulas): """**Prerequisite: 11th level** -Your weapon attacks score a critical hit on a roll of 19-20. -Side effect. You have disadvantage on Strength saving throws. - + Your weapon attacks score a critical hit on a roll of 19-20. + Side effect. You have disadvantage on Strength saving throws. + """ - + name = "Precision" - + class Rapidity(Formulas): - """Your speed increases by 10 feet. At 15th level, your speed increases by 15 feet instead. -Side effect. You have disadvantage on Intelligence ability checks. - + """Your speed increases by 10 feet. At 15th level, your speed + increases by 15 feet instead. Side effect. You have disadvantage on + Intelligence ability checks. + """ - + name = "Rapidity" - - + + class Reconstruction(Formulas): """**Prerequisite: 7th level** -For 1 hour, at the start of each of your turns, you regain hit points equal to your proficiency bonus if you have at least 1 hit point, but no more than half of your hit points. -Side effect. Your speed decreases by 10 ft for 1 hour. - + For 1 hour, at the start of each of your turns, you regain hit points + equal to your proficiency bonus if you have at least 1 hit point, but no + more than half of your hit points. Side effect. Your speed decreases by 10 + ft for 1 hour. + """ - + name = "Reconstruction" - - + + class Sagacity(Formulas): - """Your Intelligence score increases by 3, as does your Intelligence maximum. This bonus increases by 1 at 11th and 18th level. -Side effect. You have disadvantage on Charisma saving throws. - + """Your Intelligence score increases by 3, as does your Intelligence + maximum. This bonus increases by 1 at 11th and 18th level. Side effect. + You have disadvantage on Charisma saving throws. + """ - + name = "Sagacity" - - + + class Shielded(Formulas): """You gain resistance to slashing damage. -Side effect. You gain vulnerability to bludgeoning damage. - + Side effect. You gain vulnerability to bludgeoning damage. + """ - + name = "Shielded" - - + + class Unbreakable(Formulas): """You gain resistance to bludgeoning damage. -Side effect. You gain vulnerability to piercing damage. + Side effect. You gain vulnerability to piercing damage. """ - + name = "Unbreakable" - - + + class Vermillion(Formulas): """You gain an additional use of your Blood Maledict feature. -Side effect. You have disadvantage on death saving throws. - + Side effect. You have disadvantage on death saving throws. + """ - + name = "Vermillion" - + #Order of the Profane Soul class ArchfeyPatron(Feature): - """When you deal rite damage to a creature, it glows with faint light until the end of your next turn. For the duration, the creature can’t benefit from half cover, three-quarters cover, or being invisible. - + """When you deal rite damage to a creature, it glows with faint light + until the end of your next turn. For the duration, the creature can’t + benefit from half cover, three-quarters cover, or being invisible. + """ - + name = "Archfey Patron" source = "Blood Hunter (Order of the Profane Soul)" class CelestialPatron(Feature): - """You can expend a use of your Blood Maledict feature as a bonus action to heal one creature that you can see within 60 feet of you. They regain a number of hit points hit points equal to one roll of your hemocraft die + your Intelligence modifier (minimum of +1). - + """You can expend a use of your Blood Maledict feature as a bonus + action to heal one creature that you can see within 60 feet of you. They + regain a number of hit points hit points equal to one roll of your + hemocraft die + your Intelligence modifier (minimum of +1). + """ - + name = "Celestial Patron" source = "Blood Hunter (Order of the Profane Soul) " - - + + class FiendPatron(Feature): - """While using the Rite of the Flame, if you roll a 1 or 2 on your rite damage die, you can reroll the die and choose which roll to use. - + """While using the Rite of the Flame, if you roll a 1 or 2 on your + rite damage die, you can reroll the die and choose which roll to use. + """ - + name = "Fiend Patron" source = "Blood Hunter (Order of the Profane Soul)" class GreatOldOnePatron(Feature): - """When you score a critical hit against a creature while using the weapon, that creature is frightened of you until the end of your next turn. - + """When you score a critical hit against a creature while using the + weapon, that creature is frightened of you until the end of your next + turn. + """ - + name = "Great Old One Patron" source = "Blood Hunter (Order of the Profane Soul) " class HexbladePatron(Feature): - """Whenever you target a creature with a blood curse, your next attack against the cursed creature deals additional damage equal to your proficiency modifier. - + """Whenever you target a creature with a blood curse, your next attack + against the cursed creature deals additional damage equal to your + proficiency modifier. + """ - + name = "Hexblade Patron" source = "Blood Hunter (Order of the Profane Soul)" class UndyingPatron(Feature): - """Whenever you reduce a hostile creature to 0 hit points using a weapon attack, you regain a number of hit points equal to one roll of your hemocraft die. - + """Whenever you reduce a hostile creature to 0 hit points using a + weapon attack, you regain a number of hit points equal to one roll of your + hemocraft die. + """ - + name = "Undying Patron" source = "Blood Hunter (Order of the Profane Soul)" class OtherworldlyPatron(FeatureSelector): - """When you reach 3rd level, you strike a bargain with an otherworldly being of your choice: the Archfey, the Fiend, or the Great Old One, each detailed in the Player’s Handbook, the Undying within the Sword Coast Adventurer’s Guide, and the Celestial or Hexblade in Xanathar’s Guide to Everything. Your choice augments some of your order features. - + """When you reach 3rd level, you strike a bargain with an otherworldly + being of your choice: the Archfey, the Fiend, or the Great Old One, each + detailed in the Player’s Handbook, the Undying within the Sword Coast + Adventurer’s Guide, and the Celestial or Hexblade in Xanathar’s Guide to + Everything. Your choice augments some of your order features. + """ - + options = { - "Archfey": ArchfeyPatron, - "Celestial": CelestialPatron, - "Fiend": FiendPatron, - "Great Old One": GreatOldOnePatron, - "Hexblade": HexbladePatron, - "Undying": UndyingPatron, + "Archfey": ArchfeyPatron, + "Celestial": CelestialPatron, + "Fiend": FiendPatron, + "Great Old One": GreatOldOnePatron, + "Hexblade": HexbladePatron, + "Undying": UndyingPatron, } name = "Otherworldly Patron (Select One)" source = "Blood Hunter (Order of the Profane Soul)" - + class PactMagic(Feature): - """When you reach 3rd level, you can augment your combat techniques with the ability to cast spells. See chapter 10 of the PHB for the general rules of spellcasting and chapter 11 of the Player’s Handbook for the Warlock spell list. + """When you reach 3rd level, you can augment your combat techniques + with the ability to cast spells. See chapter 10 of the PHB for the general + rules of spellcasting and chapter 11 of the Player’s Handbook for the + Warlock spell list. -Cantrips. You learn two cantrips of your choice from the warlock spell list. You learn an additional warlock cantrip of your choice at 10th level. + Cantrips. You learn two cantrips of your choice from the warlock spell + list. You learn an additional warlock cantrip of your choice at 10th + level. -Spell Slots. The Profane Soul Spellcasting table shows how many spell slots you have. The table also shows what the level of those slots is; all of your spell slots are the same level. To cast one of your warlock spells of 1st level or higher, you must expend a spell slot. You regain all expended spell slots when you finish a short or long rest. + Spell Slots. The Profane Soul Spellcasting table shows how many spell + slots you have. The table also shows what the level of those slots is; all + of your spell slots are the same level. To cast one of your warlock spells + of 1st level or higher, you must expend a spell slot. You regain all + expended spell slots when you finish a short or long rest. -For example, when you are 8th level, you have two 2nd-level spell slots. To cast the 1st-level spell witch bolt, you must spend one of those slots, and you cast it as a 2nd-level spell. + For example, when you are 8th level, you have two 2nd-level spell slots. + To cast the 1st-level spell witch bolt, you must spend one of those slots, + and you cast it as a 2nd-level spell. -Spells Known of 1st Level and Higher. At 3rd level, you know two 1st-level spells of your choice from the warlock spell list. + Spells Known of 1st Level and Higher. At 3rd level, you know two 1st-level + spells of your choice from the warlock spell list. -The Spells Known column of the Profane Soul table shows when you learn more warlock spells of your choice of 1st level and higher. A spell you choose must be of a level no higher than what’s shown in the table’s Slot Level column for your level. When you reach 11th level, for example, you learn a new warlock spell, which can be 1st, 2nd, or 3rd level. + The Spells Known column of the Profane Soul table shows when you learn + more warlock spells of your choice of 1st level and higher. A spell you + choose must be of a level no higher than what’s shown in the table’s Slot + Level column for your level. When you reach 11th level, for example, you + learn a new warlock spell, which can be 1st, 2nd, or 3rd level. -Additionally, when you gain a level in this class and order, you can choose one of the warlock spells you know and replace it with another spell from the warlock spell list, which also must be of a level for which you have spell slots. + Additionally, when you gain a level in this class and order, you can + choose one of the warlock spells you know and replace it with another + spell from the warlock spell list, which also must be of a level for which + you have spell slots. -Spellcasting Ability. Intelligence is your spellcasting ability for your warlock spells, so you use your Intelligence whenever a spell refers to your spellcasting ability. In addition, you use your Intelligence modifier when setting the saving throw DC for a warlock spell you cast and when making an attack roll with one. + Spellcasting Ability. Intelligence is your spellcasting ability for your + warlock spells, so you use your Intelligence whenever a spell refers to + your spellcasting ability. In addition, you use your Intelligence modifier + when setting the saving throw DC for a warlock spell you cast and when + making an attack roll with one. -Spell save DC = 8 + your proficiency bonus + your Intelligence modifier + Spell save DC = 8 + your proficiency bonus + your Intelligence modifier + + Spell attack modifier = your proficiency bonus + your Intelligence + modifier -Spell attack modifier = your proficiency bonus + your Intelligence modifier - """ - + name = "Pact Magic" source = "Blood Hunter (Order of the Profane Soul)" class RiteFocus(Feature): - """Beginning at 3rd level, your weapon becomes a core to your pact with your chosen dark patron. While you have an active Crimson Rite, you can use your weapon as a spellcasting focus (found in chapter 5 of the Player’s Handbook) for your warlock spells, and you gain a specific benefit based on your chosen pact (outlined below). - + """Beginning at 3rd level, your weapon becomes a core to your pact + with your chosen dark patron. While you have an active Crimson Rite, you + can use your weapon as a spellcasting focus (found in chapter 5 of the + Player’s Handbook) for your warlock spells, and you gain a specific + benefit based on your chosen pact (outlined below). + The Archfey -When you deal rite damage to a creature, it glows with faint light until the end of your next turn. For the duration, the creature can’t benefit from half cover, three-quarters cover, or being invisible. + When you deal rite damage to a creature, it glows with faint light until + the end of your next turn. For the duration, the creature can’t benefit + from half cover, three-quarters cover, or being invisible. -The Celestial + The Celestial -You can expend a use of your Blood Maledict feature as a bonus action to heal one creature that you can see within 60 feet of you. They regain a number of hit points hit points equal to one roll of your hemocraft die + your Intelligence modifier (minimum of +1). + You can expend a use of your Blood Maledict feature as a bonus action to + heal one creature that you can see within 60 feet of you. They regain a + number of hit points hit points equal to one roll of your hemocraft die + + your Intelligence modifier (minimum of +1). -The Fiend + The Fiend -While using the Rite of the Flame, if you roll a 1 or 2 on your rite damage die, you can reroll the die and choose which roll to use. + While using the Rite of the Flame, if you roll a 1 or 2 on your rite + damage die, you can reroll the die and choose which roll to use. -The Great Old One + The Great Old One -When you score a critical hit against a creature while using the weapon, that creature is frightened of you until the end of your next turn. + When you score a critical hit against a creature while using the weapon, + that creature is frightened of you until the end of your next turn. -The Hexblade + The Hexblade -Whenever you target a creature with a blood curse, your next attack against the cursed creature deals additional damage equal to your proficiency modifier. + Whenever you target a creature with a blood curse, your next attack + against the cursed creature deals additional damage equal to your + proficiency modifier. -The Undying + The Undying -Whenever you reduce a hostile creature to 0 hit points using a weapon attack, you regain a number of hit points equal to one roll of your hemocraft die. + Whenever you reduce a hostile creature to 0 hit points using a weapon + attack, you regain a number of hit points equal to one roll of your + hemocraft die. """ - + name = "Rite Focus" source = "Blood Hunter (Order of the Profane Soul)" - - + + class MysticFrenzy(Feature): - """Starting at 7th level, when you use your action to cast a cantrip, you can immediately make one weapon attack as a bonus action. - + """Starting at 7th level, when you use your action to cast a cantrip, +you can immediately make one weapon attack as a bonus action. + """ - + name = "Mystic Frenzy" source = "Blood Hunter (Order of the Profane Soul)" - - + + class RevealedArcana(Feature): - """At 7th level, your dark patron grants you the rare use of a dangerous arcane spell based on your pact. -The Archfey + """At 7th level, your dark patron grants you the rare use of a + dangerous arcane spell based on your pact. -You can cast blur once using a pact magic spell slot. You can’t do so again until you finish a long rest. + The Archfey -The Celestial + You can cast blur once using a pact magic spell slot. You can’t do so + again until you finish a long rest. -You can cast lesser restoration once using a pact magic spell slot. You can’t do so again until you finish a long rest. + The Celestial -The Fiend + You can cast lesser restoration once using a pact magic spell slot. You + can’t do so again until you finish a long rest. -You can cast scorching ray once using a pact magic spell slot. You can’t do so again until you finish a long rest. + The Fiend -The Great Old One + You can cast scorching ray once using a pact magic spell slot. You can’t + do so again until you finish a long rest. -You can cast detect thoughts once using a pact magic spell slot. You can’t do so again until you finish a long rest. + The Great Old One -The Hexblade + You can cast detect thoughts once using a pact magic spell slot. You can’t + do so again until you finish a long rest. -You can cast branding smite once using a pact magic spell slot. You can’t do so again until you finish a long rest. + The Hexblade -The Undying + You can cast branding smite once using a pact magic spell slot. You can’t + do so again until you finish a long rest. + + The Undying + + You can cast blindness/deafness once using a pact magic spell slot. You + can’t do so again until you finish a long rest. -You can cast blindness/deafness once using a pact magic spell slot. You can’t do so again until you finish a long rest. - """ - + name = "Revealed Arcana" source = "Blood Hunter (Order of the Profane Soul)" - - + + class BrandOfTheSappingScar(Feature): - """Upon reaching 11th level, your Brand of Castigation feature now digs dark, arcane scars into your target, leaving them vulnerable to your magic. A creature branded by you has disadvantage on their saving throws against your warlock spells. - + """Upon reaching 11th level, your Brand of Castigation feature now + digs dark, arcane scars into your target, leaving them vulnerable to your + magic. A creature branded by you has disadvantage on their saving throws + against your warlock spells. + """ - + name = "Brand of the Sapping Scar" source = "Blood Hunter (Order of the Profane Soul)" - - + + class UnsealedArcana(Feature): - """At 15th level, your patron grants you the rare use of an additional arcane spell based on your pact. -The Archfey + """At 15th level, your patron grants you the rare use of an additional + arcane spell based on your pact. + + The Archfey -You can cast slow once without expending a spell slot. You can’t do so again until you finish a long rest. + You can cast slow once without expending a spell slot. You can’t do so + again until you finish a long rest. -The Celestial + The Celestial -You can cast revivify once without expending a spell slot. You can’t do so again until you finish a long rest. + You can cast revivify once without expending a spell slot. You can’t do so + again until you finish a long rest. -The Fiend + The Fiend -You can cast fireball once without expending a spell slot. You can’t do so again until you finish a long rest. + You can cast fireball once without expending a spell slot. You can’t do so + again until you finish a long rest. -The Great Old One + The Great Old One -You can cast haste once without expending a spell slot. You can’t do so again until you finish a long rest. + You can cast haste once without expending a spell slot. You can’t do so + again until you finish a long rest. -The Hexblade + The Hexblade -You can cast blink once without expending a spell slot. You can’t do so again until you finish a long rest. + You can cast blink once without expending a spell slot. You can’t do so + again until you finish a long rest. -The Undying + The Undying + + You can cast bestow curse once without expending a spell slot. You can’t + do so again until you finish a long rest. -You can cast bestow curse once without expending a spell slot. You can’t do so again until you finish a long rest. - """ - + name = "Unsealed Arcana" source = "Blood Hunter (Order of the Profane Soul)" - - -class BloodCurseOfTheSouleater(Feature): - """Starting at 18th level, you’ve learned to siphon the soul from your fallen prey. You gain the Blood Curse of the Souleater for your Blood Maledict feature. This does not count against your number of blood curses known. - - """ - - name = "Blood Curse of the Souleater" - source = "Blood Hunter (Order of the Profane Soul)" diff --git a/dungeonsheets/features/cleric.py b/dungeonsheets/features/cleric.py index fa1f5405..6a22fe60 100644 --- a/dungeonsheets/features/cleric.py +++ b/dungeonsheets/features/cleric.py @@ -166,7 +166,7 @@ class ReadThoughts(DivineIntervention): class PotentSpellcasting(Feature): - """Starting at 8th level, you add your W isdom modifier to the damage you deal + """Starting at 8th level, you add your Wisdom modifier to the damage you deal with any cleric cantrip. """ @@ -212,7 +212,7 @@ class DiscipleOfLife(Feature): """Also starting at 1st level, your healing spells are more effective. Whenever you use a spell of 1st level or higher to restore hit points to a creature, the creature regains additional hit points equal to 2 - + the spell's level + + the spell's level. """ @@ -279,7 +279,7 @@ class WardingFlare(Feature): attack roll, causing light to flare before the attacker before it hits or misses. An attacker that can't be blinded is immune to this feature. You can use this feature a number of times equal to your Wisdom modifier (a - minimum of once). You regain all expended uses when you finish a long rest + minimum of once). You regain all expended uses when you finish a long rest. """ @@ -325,7 +325,7 @@ class CoronaOfLight(Feature): sunlight that lasts for 1 minute or until you dismiss it using another action. You emit bright light in a 60-foot radius and dim light 30 feet beyond that. Your enemies in the bright light have disadvantage on saving - throws against any spell that deals fire or radiant damage + throws against any spell that deals fire or radiant damage. """ @@ -468,7 +468,7 @@ class BlessingOfTheTrickster(Feature): """Starting when you choose this domain at 1st level, you can use your action to touch a willing creature other than yourself to give it advantage on Dexterity (Stealth) checks. This blessing lasts for 1 hour or until you use - this feature again + this feature again. """ @@ -537,7 +537,7 @@ class WarPriest(Feature): engaged in battle. When you use the Attack action, you can make one weapon attack as a bonus action. You can use this feature a number of times equal to your Wisdom modifier (a minimum of once). You regain all expended uses - when you finish a long rest + when you finish a long rest. """ @@ -555,7 +555,7 @@ class GuidedStrike(ChannelDivinity): supernatural accuracy. When you make an attack roll, you can use your Channel Divinity to gain a +10 bonus to the roll. You make this choice after you see the roll, but before the DM says whether the attack hits or - misses + misses. """ @@ -600,7 +600,7 @@ class AvatarOfBattle(Feature): class ArcaneInitiate(Feature): """When you choose this domain at 1st level, you gain proficiency in the Arcana skill, and you gain two cantrips of your choice from the wizard - spell list. For you, these cantrips count as cleric cantrips + spell list. For you, these cantrips count as cleric cantrips. """ @@ -628,11 +628,17 @@ class ArcaneAbjuration(ChannelDivinity): plane of origin and its challenge rating is at or below a certain threshold, as shown on the Arcane Banishment table. - 5th level : CR 1/2 - 8th level : CR 1 - 11th level : CR 2 - 14th level : CR 3 - 17th level : CR 4 + =============== =================================== + Arcane Banishment + ---------------------------------------------------- + Cleric level Banishes Creatures of CR... + =============== =================================== + 5th CR 1/2 or lower + 8th CR 1 or lower + 11th CR 2 or lower + 14th CR 3 or lower + 17th CR 4 or lower + =============== =================================== """ @@ -670,9 +676,9 @@ class BlessingOfTheForge(Feature): armor. At the end of a long rest, you can touch one nonmagical object that is a suit of armor or a simple or martial weapon. Until the end of your next long rest or until you die, the object becomes a magic item, granting - a +1 bonus to AC if it's armor or a +1 bo- nus to attack and damage rolls + a +1 bonus to AC if it's armor or a +1 bonus to attack and damage rolls if it's a weapon. Once you use this feature, you can't use it again until - you finish a long rest + you finish a long rest. """ @@ -682,7 +688,7 @@ class BlessingOfTheForge(Feature): class ArtisansBlessing(Feature): """Starting at 2nd level, you can use your Channel Divinity to create simple - items. You conduct an hour-long ritual that crafts a nonmagi- cal item that + items. You conduct an hour-long ritual that crafts a nonmagical item that must include some metal: a simple or martial weapon, a suit of armor, ten pieces of ammunition, a set of tools, or another metal Object (see chapter 5, "Equipment," in the Player's Handbook for examples of these items). The @@ -707,9 +713,9 @@ class SoulOfTheForge(Feature): """Starting at 6th level, your mastery of the forge grants you special abilities: - • You gain resistance to fire damage. + - You gain resistance to fire damage. - • While wearing heavy armor, you gain a +1 bonus to AC. + - While wearing heavy armor, you gain a +1 bonus to AC. """ @@ -722,7 +728,7 @@ class DivineStrikeForge(DivineStrike): with the fiery power of the forge. Once on each of your turns when you hit a creature with a weapon attack, you can cause the attack to deal an extra 1d8 fire damage to the target. When you reach - 14th level, the extra damage increases to 2d8 + 14th level, the extra damage increases to 2d8. """ @@ -735,7 +741,7 @@ class SaintOfForgeAndFire(Feature): - You gain immunity to fire damage. - While wearing heavy armor, you have resistance to bludgeoning, - piercing, and slashing damage from non-magical attacks + piercing, and slashing damage from non-magical attacks. """ @@ -751,7 +757,7 @@ class CircleOfMortality(Feature): number possible for each die. In addition, you learn the spare the dying cantrip, which doesn't count against the number of cleric cantrips you know. For you, it has a range of 30 feet, and you can cast it as a bonus - action + action. """ @@ -772,7 +778,7 @@ class EyesOfTheGrave(Feature): This sense doesn't tell you anything about a creature's capabilities or identity. You can use this feature a number of times equal to your Wisdom modifier (minimum Of once). You regain all expended uses when you finish a - long rest + long rest. """ @@ -791,7 +797,7 @@ class PathToTheGrave(ChannelDivinity): creature you can see within 30 feet of you, cursing it until the end Of your next turn. The next time you or an ally Ofyours hits the cursed creature with an attack, the creature has vulnerability tO all of that - attack's damage, and then the curse ends + attack's damage, and then the curse ends. """ @@ -859,7 +865,7 @@ class TouchOfDeathCleric(Feature): class InescapableDestruction(Feature): """Starting at 6th level, your ability to channel negative energy becomes more potent. Necrotic damage dealt by your cleric spells and Channel - Divinity options ignores resistance to necrotic damage + Divinity options ignores resistance to necrotic damage. """ diff --git a/dungeonsheets/features/druid.py b/dungeonsheets/features/druid.py index 8b1be38c..abb431b1 100644 --- a/dungeonsheets/features/druid.py +++ b/dungeonsheets/features/druid.py @@ -108,7 +108,7 @@ class Archdruid(Feature): Additionally, you can ignore the verbal and somatic components of your druid spells, as well as any material components that lack a cost and aren't consumed by a spell. You gain this benefit in both your normal shape - and your beast shape from Wild Shape + and your beast shape from Wild Shape. """ @@ -119,7 +119,7 @@ class Archdruid(Feature): # Circle of the Land class BonusCantrip(Feature): """When you choose this circle at 2nd level, you learn one additional druid - cantrip of your choice + cantrip of your choice. """ @@ -188,7 +188,7 @@ class ArcticSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -205,7 +205,7 @@ class CoastSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -222,7 +222,7 @@ class DesertSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -239,7 +239,7 @@ class ForestSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -256,7 +256,7 @@ class GrasslandSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -273,7 +273,7 @@ class MountainSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -290,7 +290,7 @@ class SwampSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -307,7 +307,7 @@ class UnderdarkSpells(_CircleSpells): """Your mystical connection to the land infuses you with the ability to cast certain spells. - These spells are included in your Spell Sheet + These spells are included in your Spell Sheet. """ @@ -321,7 +321,7 @@ class UnderdarkSpells(_CircleSpells): class SporesSpells(_CircleSpells): - """Your symbiotic link do fungus and your ability to tap into the cycle of + """Your symbiotic link to fungus and your ability to tap into the cycle of life and death grants you access to certain spells. These spells are included in your Spell Sheet. @@ -393,7 +393,7 @@ class LandsStride(Feature): class NaturesWard(Feature): """When you reach 10th level, you can't be charmed or frightened by elementals - or fey, and you are immune to poison and disease + or fey, and you are immune to poison and disease. """ @@ -408,7 +408,7 @@ class NaturesSanctuary(Feature): against your druid spell save DC. On a failed save, the creature must choose a different target, or the attack automatically misses. On a successful save, the creature is immune to this effect for 24 hours. The - creature is aware of this effect before it makes its attack against you + creature is aware of this effect before it makes its attack against you. """ @@ -437,7 +437,7 @@ class CircleForms(Feature): the Max. CR column of the Beast Shapes table, but must abide by the other limitations there). Starting at 6th level, you can transform into a beast with a challenge rating as high as your druid level divided by 3, rounded - down + down. """ @@ -490,7 +490,7 @@ class BalmOfTheSummerCourt(Feature): are a font of energy that offers respite from injuries. You have a pool of fey energy represented by a number of d6s equal to your druid level. As a bonus action, you can choose one creature you can see within 120 feet - ofyou and spend a number of those dice equal to halfyour druid level or + of you and spend a number of those dice equal to half your druid level or less. Roll the spent dice and add them together. The target regains a number of hit points equal to the total. The target also gains 1 temporary hit point per die spent. You regain all expended dice when you finish a @@ -516,7 +516,7 @@ class HearthOfMoonlightAndShadow(Feature): While within the sphere, you and your allies gain a +5 bonus to Dexterity (Stealth) and Wisdom (Perception) checks, and any light from open flames in the sphere (a campfire, torches, or the like) isn't visible outside it. The - sphere vanishes at the end of the rest or when you leave the sphere + sphere vanishes at the end of the rest or when you leave the sphere. """ @@ -533,7 +533,7 @@ class HiddenPaths(Feature): Alternatively, you can use your action to teleport one willing creature you touch up to 30 feet to an unoccupied space you can see. You can use this feature a number of times equal to your Wisdom modifier (minimum of once), - and you regain all expended uses of it when you finish a long rest + and you regain all expended uses of it when you finish a long rest. """ @@ -655,7 +655,7 @@ class GuardianSpirit(Feature): class FaithfulSummons(Feature): """Starting at 14th level, the nature spirits you commune with protect - you when you are the most defenseless. Ifyou are reduced to 0 hit + you when you are the most defenseless. If you are reduced to 0 hit points or are incapacitated against your will, you can immediately gain the benefits of conjure animals as if it were cast using a 9th-level spell slot. It summons four beasts of your choice that @@ -664,7 +664,7 @@ class FaithfulSummons(Feature): you from harm and attack your foes. The spell lasts for 1 hour, requiring no concentration, or until you dismiss it (no action required). Once you use this feature, you can't use it again until - you finish a long rest + you finish a long rest. """ @@ -680,7 +680,7 @@ class HaloOfSpores(Feature): turn there, you can use your reaction to deal 1d4 necrotic damage to that creature unless it succeeds on a Constitution saving throw against your spell save DC. The necrotic damage increases to 1d6 at 6th level, 1d8 at - 10th level, and 1d10 at 14th level + 10th level, and 1d10 at 14th level. """ @@ -695,11 +695,11 @@ class SymbioticEntity(Feature): temporary hit points for each level you have in this class. While this feature is active, you gain the following benefits: - -- When you deal your Halo of Spores damage, roll the damage die a second - time and add it to the total. + - When you deal your Halo of Spores damage, roll the damage die a second + time and add it to the total. - -- Your melee weapon attacks deal an extra 1d6 poison damage to any target - they hit. + - Your melee weapon attacks deal an extra 1d6 poison damage to any target + they hit. These benefits last for 10 minutes, until you lose all these temporary hit points, or until you use your Wild Shape again. @@ -743,7 +743,7 @@ class SpreadingSpores(Feature): Whenever a creature moves into the cube or starts its turn there, that creature takes your Halo of Spores damage, unless the creature succeeds on a Constitution saving throw against your spell save DC. A creature can take - this damage nbo mre than once per turn. + this damage no more than once per turn. While the cube of spores persists, you can't use your Halo of Spores reaction. diff --git a/dungeonsheets/features/feats.py b/dungeonsheets/features/feats.py index 5e818479..5e582272 100644 --- a/dungeonsheets/features/feats.py +++ b/dungeonsheets/features/feats.py @@ -1,4 +1,4 @@ -from dungeonsheets.features.features import Feature +from dungeonsheets.features.features import Feature, FeatureSelector # PHB @@ -94,7 +94,7 @@ class DefensiveDuelist(Feature): can use your reaction to add your proficiency bonus to your AC for that attack, potentially causing the attack to miss you. - **Prerequisite:** Dexterity 13 or higher + **Prerequisite:** Dexterity 13 or higher. """ @@ -165,7 +165,7 @@ class ElementalAdept(Feature): You can select this feat multiple times. Each time you do so, you must choose a different damage type. - **Prerequisite:** The ability to cast at least one spell + **Prerequisite:** The ability to cast at least one spell. """ @@ -185,7 +185,7 @@ class Grappler(Feature): - Creatures that are one size larger than you don’t automatically succeed on checks to escape your grapple. - **Prerequisite:** Strength 13 or higher + **Prerequisite:** Strength 13 or higher. """ @@ -203,7 +203,7 @@ class GreatWeaponMaster(Feature): - Before you make a melee attack with a heavy weapon that you are proficient with, you can choose to take a -5 penalty to the attack roll. If the attack hits, you add +10 to the attack's - damage + damage. """ @@ -236,7 +236,7 @@ class HeavilyArmored(Feature): - Increase your Strength score by 1, to a maximum of 20. - You gain proficiency with heavy armor. - **Prerequisite:** Proficiency with medium armor + **Prerequisite:** Proficiency with medium armor. """ @@ -253,7 +253,7 @@ class HeavyArmorMaster(Feature): slashing damage that you take from non magical weapons is reduced by 3. - **Prerequisite:** Proficiency with heavy armor + **Prerequisite:** Proficiency with heavy armor. """ @@ -272,7 +272,7 @@ class InspiringLeader(Feature): A creature can’t gain temporary hit points from this feat again until it has finished a short or long rest. - **Prerequisite:** Charisma 13 or higher + **Prerequisite:** Charisma 13 or higher. """ @@ -418,7 +418,7 @@ class MediumArmorMaster(Feature): - When you wear medium armor, you can add 3, rather than 2, to your AC if you have a Dexterity of 16 or higher. - **Prerequisite:** Prerequisite: Proficiency with medium armor + **Prerequisite:** Prerequisite: Proficiency with medium armor. """ @@ -450,7 +450,7 @@ class ModeratelyArmored(Feature): 20. - You gain proficiency with medium armor and shields. - **Prerequisite:** Proficiency with light armor + **Prerequisite:** Proficiency with light armor. """ @@ -513,17 +513,128 @@ class PolearmMaster(Feature): source = "Feats" -class Resilient(Feature): - """Choose one ability score. You gain the following benefits: +class ResilientStrength(Feature): + """You gain the following benefits: + + - Increase your strength by 1, to a maximum of 20. + - You gain proficiency in strength saving throws. + + """ + name = "Resilient (Strength)" + source = "Feats" + def __init__(self, owner=None): + super().__init__(owner=owner) + self.owner.saving_throw_proficiencies += ("strength",) + + +class ResilientDexterity(Feature): + """You gain the following benefits: + + - Increase your dexterity by 1, to a maximum of 20. + - You gain proficiency in dexterity saving throws. + + """ + name = "Resilient (Dexterity)" + source = "Feats" + def __init__(self, owner=None): + super().__init__(owner=owner) + self.owner.saving_throw_proficiencies += ("dexterity",) + + +class ResilientConstitution(Feature): + """You gain the following benefits: + + - Increase your constitution by 1, to a maximum of 20. + - You gain proficiency in constitution saving throws. + + """ + name = "Resilient (Constitution)" + source = "Feats" + def __init__(self, owner=None): + super().__init__(owner=owner) + self.owner.saving_throw_proficiencies += ("constitution",) + + +class ResilientWisdom(Feature): + """You gain the following benefits: + + - Increase your wisdom by 1, to a maximum of 20. + - You gain proficiency in wisdom saving throws. + + """ + name = "Resilient (Wisdom)" + source = "Feats" + def __init__(self, owner=None): + super().__init__(owner=owner) + self.owner.saving_throw_proficiencies += ("wisdom",) + + +class ResilientIntelligence(Feature): + """You gain the following benefits: + + - Increase your intelligence by 1, to a maximum of 20. + - You gain proficiency in intelligence saving throws. + + """ + name = "Resilient (Intelligence)" + source = "Feats" + def __init__(self, owner=None): + super().__init__(owner=owner) + self.owner.saving_throw_proficiencies += ("intelligence",) + + +class ResilientCharisma(Feature): + """You gain the following benefits: + + - Increase your charisma by 1, to a maximum of 20. + - You gain proficiency in charisma saving throws. + + """ + name = "Resilient (Charisma)" + source = "Feats" + def __init__(self, owner=None): + super().__init__(owner=owner) + self.owner.saving_throw_proficiencies += ("Charisma",) + + +class Resilient(FeatureSelector): + """ + Choose one ability score. You gain the following benefits: - Increase the chosen ability score by 1, to a maximum of 20. - You gain proficiency in saving throws using the chosen ability. + Select one of the following resilient options under feature_choices in + your .py file: + + resilientstrength + + resilientdexterity + + resilientconstitution + + resilientwisdom + + resilientintelligence + + resilientcharisma + + + Don't forget to increase your chosen Ability score! + """ + options = { + "resilientstrength": ResilientStrength, + "resilientdexterity": ResilientDexterity, + "resilientconstitution": ResilientConstitution, + "resilientwisdom": ResilientWisdom, + "resilientintelligence": ResilientIntelligence, + "resilientcharisma": ResilientCharisma, + } name = "Resilient" source = "Feats" - needs_implementation = True + needs_implementation = False class RitualCaster(Feature): @@ -550,7 +661,7 @@ class you chose, the spell’s level can be no higher than half your material components you expend as you experiment with the spell to master it, as well as the fine inks you need to record it. - Prerequisite: Intelligence or Wisdom 13 or higher + Prerequisite: Intelligence or Wisdom 13 or higher. """ @@ -650,7 +761,7 @@ class Skulker(Feature): - Dim light doesn’t impose disadvantage on your Wisdom (Perception) checks relying on sight. - Prerequisite: Dexterity 13 or higher + Prerequisite: Dexterity 13 or higher. """ @@ -674,7 +785,7 @@ class SpellSniper(Feature): bard, sorcerer, or warlock; Wisdom for cleric or druid; or Intelligence for wizard. - Prerequisite: The ability to cast at least one spell + Prerequisite: The ability to cast at least one spell. """ @@ -726,7 +837,7 @@ class WarCaster(Feature): spell must have a casting time of 1 action and must target only that creature. - **Prerequisite:** The ability to cast at least one spell + **Prerequisite:** The ability to cast at least one spell. """ @@ -764,7 +875,7 @@ class BarbedHide(Feature): already proficient in it, your proficiency bonus is doubled for any check you make with it. - **Prerequisite:** Tiefling + **Prerequisite:** Tiefling. """ @@ -777,7 +888,7 @@ class BountifulLuckUA(Feature): for an attack roll, an ability check, or a saving throw, you can use your reaction to let the ally reroll the die. The ally must use the new roll. - **Prerequisite:** Halfling + **Prerequisite:** Halfling. """ name = "Bountiful Luck (UA)" @@ -811,7 +922,7 @@ class DragonWings(Feature): 20 feet if you aren’t wearing heavy armor and aren’t exceeding your carrying capacity. - **Prerequisite:** Dragonborn + **Prerequisite:** Dragonborn. """ name = "Dragon Wings" @@ -827,7 +938,7 @@ class EverybodysFriend(Feature): you're already proficient in either skill, your proficiency bonus is doubled for any check you make with that skill. - **Prerequisite:** Half-elf + **Prerequisite:** Half-elf. """ @@ -854,7 +965,7 @@ class GrudgeBearer(Feature): you add double your proficiency bonus to the check, even if you’re not normally proficient. - **Prerequisite:** Dwarf + **Prerequisite:** Dwarf. """ @@ -873,7 +984,7 @@ class HumanDetermination(Feature): throw, you can do so with advantage. Once you use this ability, you can’t use it again until you finish a short or long rest. - **Prerequisite:** Human + **Prerequisite:** Human. """ @@ -886,7 +997,7 @@ class OrcishAggression(Feature): your choice that you can see or hear. You must end this move closer to the enemy than you started. - **Prerequisite:** Half-orc + **Prerequisite:** Half-orc. """ @@ -941,7 +1052,7 @@ class BountifulLuck(Feature): you use this ability, you can’t use your Lucky racial trait before the end of your next turn. - **Prerequisite:** Halfling + **Prerequisite:** Halfling. """ @@ -963,7 +1074,7 @@ class DragonFear(Feature): frightened target takes any damage, it can repeat the saving throw, ending the effect on itself on a success. - **Prerequisite:** Dragonborn + **Prerequisite:** Dragonborn. """ @@ -987,7 +1098,7 @@ class DragonHide(Feature): equal to 1d4 + your Strength modifier, instead of the normal bludgeoning damage for an unarmed strike. - **Prerequisite:** Dragonborn + **Prerequisite:** Dragonborn. """ @@ -1023,7 +1134,7 @@ class DwarvenFortitude(Feature): modifier, and regain a number of hit points equal to the total (minimum of 1). - **Prerequisite:** Dwarf + **Prerequisite:** Dwarf. """ @@ -1043,7 +1154,7 @@ class ElvenAccuracy(Feature): Intelligence, Wisdom, or Charisma, you can reroll one of the dice once. - **Prerequisite:** Elf or half-elf + **Prerequisite:** Elf or half-elf. """ @@ -1064,7 +1175,7 @@ class FadeAway(Feature): throw. Once you use this ability, you can’t do so again until you finish a short or long rest. - **Prerequisite:** Gnome + **Prerequisite:** Gnome. """ @@ -1110,7 +1221,7 @@ class FlamesOfPhlegethos(Feature): feet. While the flames are present, any creature within 5 feet of you that hits you with a melee attack takes 1d4 fire damage. - **Prerequisite:** Tiefling + **Prerequisite:** Tiefling. """ @@ -1126,7 +1237,7 @@ class InfernalConstitution(Feature): - You have resistance to cold damage and poison damage. - You have advantage on saving throws against being poisoned. - **Prerequisite:** Tiefling + **Prerequisite:** Tiefling. """ @@ -1147,7 +1258,7 @@ class OrchishFury(Feature): - Immediately after you use your Relentless Endurance trait, you can use your reaction to make one weapon attack. - **Prerequisite:** Half-orc + **Prerequisite:** Half-orc. """ @@ -1168,7 +1279,7 @@ class Prodigy(Feature): choose must be one that isn’t already benefiting from a feature, such as Expertise, that doubles your proficiency bonus. - **Prerequisite:** Half-elf, half-orc, or human + **Prerequisite:** Half-elf, half-orc, or human. """ @@ -1188,7 +1299,7 @@ class SecondChance(Feature): initiative at the start of combat or until you finish a short or long rest. - **Prerequisite:** Halfling + **Prerequisite:** Halfling. """ @@ -1207,7 +1318,7 @@ class SquatNimbleness(Feature): - You have advantage on any Strength (Athletics) or Dexterity (Acrobatics) check you make to escape from being grappled. - **Prerequisite:** Dwarf or a Small race + **Prerequisite:** Dwarf or a Small race. """ diff --git a/dungeonsheets/features/fighter.py b/dungeonsheets/features/fighter.py index a58d646a..662a636e 100644 --- a/dungeonsheets/features/fighter.py +++ b/dungeonsheets/features/fighter.py @@ -154,7 +154,7 @@ class SecondWind(Feature): """You have a limited well of stamina that you can draw on to protect yourself from harm. On your turn, you can use a bonus action to regain hit points equal to 1d10 + your fighter level. Once you use this feature, you must - finish a short or long rest before you can use it again + finish a short or long rest before you can use it again. """ @@ -282,7 +282,7 @@ class AdditionalFightingStyle(FeatureSelector): class SuperiorCritical(Feature): """Starting at 15th level, your weapon attacks score a critical hit on a roll - of 18-20 . + of 18-20. """ name = "Superior Critical" @@ -383,19 +383,18 @@ class Relentless(Feature): # Maneuvers -class Maneuver(Feature): - """ - A generic Maneuver - """ - - name = "Maneuver" - source = "Fighter Maneuver (Battle Master)" +Maneuver = CombatSuperiority class BaitAndSwitch(Maneuver): - """When you're within 5 feet of a creature on your turn, you can expend one superiority die and switch places with that creature, provided you spend at least 5 feet of movement and the creature is willing and isn't incapacitated. This movement doesn't provoke opportunity attacks. + """When you're within 5 feet of a creature on your turn, you can expend + one superiority die and switch places with that creature, provided you + spend at least 5 feet of movement and the creature is willing and isn't + incapacitated. This movement doesn't provoke opportunity attacks. - Roll the superiority die. Until the start of your next turn, you or the other creature (your choice) gains a bonus to AC equal to the number rolled. + Roll the superiority die. Until the start of your next turn, you or the + other creature (your choice) gains a bonus to AC equal to the number + rolled. """ @@ -522,7 +521,7 @@ class PrecisionAttack(Maneuver): """When you make a weapon attack roll against a creature, you can expend one superiority die to add it to the roll. You can use this maneuver before or after making the attack roll, but before any effects of the attack are - applied + applied. """ @@ -686,7 +685,7 @@ class RallyingCry(Feature): allies to fight on past their injuries. When you use your Second Wind feature, you can choose up to three creatures within 60 feet of you that are allied with you. Each one regains hit points equal to your fighter - level, provided that the creature can see or hear you + level, provided that the creature can see or hear you. """ @@ -705,7 +704,7 @@ class RoyalEnvoy(Feature): Your proficiency bonus is doubled for any ability check you make that uses Persuasion. You receive this benefit regardless of the skill proficiency - you gain from this feature + you gain from this feature. """ @@ -739,7 +738,7 @@ class Bulwark(Feature): Intelligence, a Wisdom, or a Charisma saving throw and you aren't incapacitated, you can choose one ally within 60 feet of you that also failed its saving throw against the same effect. If that creature can see - or hear you, it can reroll its saving throw and must use the new roll + or hear you, it can reroll its saving throw and must use the new roll. """ @@ -779,7 +778,7 @@ class ArcaneShot(Feature): also improves when you become an 18th-level fighter If an option requires a saving throw, your Arcane Shot save DC equals 8 + - your proficiency bonus + your Intelligence modifier + your proficiency bonus + your Intelligence modifier. """ @@ -804,7 +803,7 @@ class CurvingShot(Feature): """At 7th level, you learn how to direct an errant arrow toward a new target. When you make an attack roll with a magic arrow and miss, you can use a bonus action to reroll the attack roll against a different target - within 60 feet of the original target + within 60 feet of the original target. """ @@ -823,7 +822,7 @@ class EverReadyShot(Feature): source = "Fighter (Arcane Archer)" -class BanishingArrow(Feature): +class BanishingArrow(ArcaneShot): """You use abjuration magic to try to temporarily banish your target to a harmless location in the Feywild. The creature hit by the arrow must also succeed on a Charisma saving throw or be banished. While banished in this @@ -840,7 +839,7 @@ class BanishingArrow(Feature): source = "Fighter (Arcane Archer)" -class BeguilingArrow(Feature): +class BeguilingArrow(ArcaneShot): """Your enchantment magic causes this arrow to temporarily beguile its target. The creature hit by the arrow takes an extra 2d6 psychic damage, and choose one of your allies within 30 feet of the target. The target must @@ -856,12 +855,12 @@ class BeguilingArrow(Feature): source = "Fighter (Arcane Archer)" -class BurstingArrow(Feature): +class BurstingArrow(ArcaneShot): """You imbue your arrow with force energy drawn from the school of evocation. The energy detonates after your attack. Immediately after the arrow hits the creature, the target and all other creatures within 10 feet of it take 2d6 force damage each. The force damage increases to 4d6 - when you reach 18th level in this class + when you reach 18th level in this class. """ @@ -869,7 +868,7 @@ class BurstingArrow(Feature): source = "Fighter (Arcane Archer)" -class EnfeeblingArrow(Feature): +class EnfeeblingArrow(ArcaneShot): """You weave necromantic magic into your arrow. The creature hit by the arrow takes an extra 2d6 necrotic damage. The target must also succeed on a Constitution saving throw, or the damage dealt by its weapon attacks is @@ -882,17 +881,17 @@ class EnfeeblingArrow(Feature): source = "Fighter (Arcane Archer)" -class GraspingArrow(Feature): +class GraspingArrow(ArcaneShot): """When this arrow strikes its target, conjuration magic creates grasping, - poisonous brams bles, which wrap around the target. The creature hit by the + poisonous brambles, which wrap around the target. The creature hit by the arrow takes an extra 2(16 poison damage, its speed is reduced by 10 feet, - and it takes 2d6 slashing dam- age the first time on each turn it moves 1 + and it takes 2d6 slashing damage the first time on each turn it moves 1 foot or more without teleporting. The target or any creature that can reach it can use its action to remove the brambles with a successful Strength (Athletics) check against your Arcane Shot save DC. Otherwise, the brambles last for 1 minute or until you use this option again. The poison damage and slashing damage both increase to 4d6 when you reach 18th level - in this class + in this class. """ @@ -900,7 +899,7 @@ class GraspingArrow(Feature): source = "Fighter (Arcane Archer)" -class PiercingArrow(Feature): +class PiercingArrow(ArcaneShot): """You use transmutation magic to give your arrow an ethereal quality. When you use this option, you don't make an attack roll for the attack. Instead, the arrow shoots forward in a line, which is 1 foot wide and 30 feet long, @@ -917,7 +916,7 @@ class PiercingArrow(Feature): source = "Fighter (Arcane Archer)" -class SeekingArrow(Feature): +class SeekingArrow(ArcaneShot): """Using divination magic, you grant your arrow the ability to seek out a target. When you use this option, you don't make an attack roll for the attack. Instead, choose one creature you have seen in the past minute. The @@ -937,17 +936,17 @@ class SeekingArrow(Feature): source = "Fighter (Arcane Archer)" -class ShadowArrow(Feature): +class ShadowArrow(ArcaneShot): """You weave illusion magic into your arrow, causing it to occlude your fees vision with shadows. The creature hit by the arrow takes an extra 2d6 psychic damage, and it must succeed on a Wisdom saving throw or be unable to see anything farther than 5 feet away until the start of your next turn. The psychic damage increases to 4d6 when you reach 18th level in this - class + class. """ - name = "Shadow Arrow" + name = "Arcane Shot: Shadow Arrow" source = "Fighter (Arcane Archer)" @@ -994,7 +993,7 @@ class UnwaveringMark(Feature): Regardless of the number of creatures you mark, you can make this special attack a number of times equal to your Strength modifier (minimum of once), - and you regain all expended uses of it when you finish a long rest + and you regain all expended uses of it when you finish a long rest. """ @@ -1017,7 +1016,7 @@ class WardingManeuver(Feature): You can use this feature a number of times equal to your Constitution modifier (minimum of once), and you regain all expended uses of it when you - finish a long rest + finish a long rest. """ @@ -1048,7 +1047,7 @@ class FerociousCharger(Feature): attacking a creature and you hit it with the attack, that target must succeed on a Strength saving throw (DC 8 + your proficiency bonus + your Strength modifier) or be knocked prone. You can use this feature only once - on each of your turns + on each of your turns. """ @@ -1061,7 +1060,7 @@ class VigilantDefender(Feature): vigilance. In combat, you get a special reaction that you can take once on every creature's turn, except your turn. You can use this special reaction only to make an opportunity attack, and you can't use it on the same turn - that you take your normal reaction + that you take your normal reaction. """ @@ -1098,7 +1097,7 @@ class FightingSpirit(Feature): class ElegantCourtier(Feature): - """Starting at 7th level, your discipline and attention to de- tail allow you + """Starting at 7th level, your discipline and attention to detail allow you to excel in social situations. Whenever you make a Charisma (Persuasion) check, you gain a bonus to the check equal to your Wisdom modifier. Your self-control also causes you to gain proficiency in Wisdom saving @@ -1127,7 +1126,7 @@ class RapidStrike(Feature): you take the Attack action on your turn and have advantage on an attack roll against one of the targets, you can forgo the advantage for that roll to make an additional weapon attack against that target, as part of the - same action. You can do so no more than once per turn + same action. You can do so no more than once per turn. """ @@ -1231,6 +1230,9 @@ class AdeptMarksman(Feature): source = "Fighter (Gunslinger" +TrickShot = AdeptMarksman + + class QuickDraw(Feature): """When you reach 7th level, you add your proficiency bonus to your initiative. You can also stow a firearm, then draw another firearm as a @@ -1281,7 +1283,7 @@ class HemorrhagingCritical(Feature): source = "Fighter (Gunslinger)" -class BullyingShot(Feature): +class BullyingShot(TrickShot): """You can use the powerful blast and thundering sound of your firearm to shake the resolve of a creature. You can expend one grit point while making a Charisma (Intimidation) check to gain advantage on the roll. @@ -1292,7 +1294,7 @@ class BullyingShot(Feature): source = "Gunslinger (Trick Shot)" -class DazingShot(Feature): +class DazingShot(TrickShot): """When you make a firearm attack against a creature, you can expend one grit point to attempt to dizzy your opponent. On a hit, the creature suffers normal damage and must make a Constitution saving throw or suffer @@ -1304,7 +1306,7 @@ class DazingShot(Feature): source = "Gunslinger (Trick Shot)" -class DeadeyeShot(Feature): +class DeadeyeShot(TrickShot): """When you make a firearm attack against a creature, you can expend one grit point to gain advantage on the attack roll. @@ -1314,7 +1316,7 @@ class DeadeyeShot(Feature): source = "Gunslinger (Trick Shot)" -class DisarmingShot(Feature): +class DisarmingShot(TrickShot): """When you make a firearm attack against a creature, you can expend one grit point to attempt to shoot an object from their hands. On a hit, the creature suffers normal damage and must succeed on a Strength saving throw @@ -1327,7 +1329,7 @@ class DisarmingShot(Feature): source = "Gunslinger (Trick Shot)" -class ForcefulShot(Feature): +class ForcefulShot(TrickShot): """When you make a firearm attack against a creature, you can expend one grit point to attempt to trip them up and force them back. On a hit, the creature suffers normal damage and must succeed on a Strength saving throw @@ -1339,7 +1341,7 @@ class ForcefulShot(Feature): source = "Gunslinger (Trick Shot)" -class PiercingShot(Feature): +class PiercingShot(TrickShot): """When you make a firearm attack against a creature, you can expend one grit point to attempt to fire through multiple opponents. The initial attack gains a +1 to the firearm's misfire score. On a hit, the creature suffers @@ -1353,7 +1355,7 @@ class PiercingShot(Feature): source = "Gunslinger (Trick Shot)" -class WingingShot(Feature): +class WingingShot(TrickShot): """When you make a firearm attack against a creature, you can expend one grit point to attempt to topple a moving target. On a hit, the creature suffers normal damage and must make a Strength saving throw or be knocked prone. @@ -1364,7 +1366,7 @@ class WingingShot(Feature): source = "Gunslinger (Trick Shot)" -class ViolentShot(Feature): +class ViolentShot(TrickShot): """When you make a firearm attack against a creature, you can expend one or more grit points to enhance the volatility of the attack. For each grit point expended, the attack gains a +2 to the firearm's misfire score. If diff --git a/dungeonsheets/features/monk.py b/dungeonsheets/features/monk.py index 43596c48..f8d7bd07 100644 --- a/dungeonsheets/features/monk.py +++ b/dungeonsheets/features/monk.py @@ -36,12 +36,12 @@ class MartialArts(Feature): bonus action, assuming you haven't already taken a bonus action this turn. - Certain monasteries use specializepd forms of the monk + Certain monasteries use specialized forms of the monk weapons. For example, you might use a club that is two lengths of - w ood connected by a short chain (called a nunchaku) or a sickle + wood connected by a short chain (called a nunchaku) or a sickle with a shorter, straighter blade (called a kama). Whatever name you use for a monk weapon, you can use the game statistics - provided for + provided for that weapon. """ @@ -86,7 +86,7 @@ class Ki(Feature): Some of your ki features require your target to make a saving throw to resist the feature's effects. The saving throw DC is calculated as follows: Ki save DC = 8 + your proficiency bonus + - your Wisdom modifier + your Wisdom modifier. """ @@ -102,7 +102,7 @@ def name(self): class FlurryOfBlows(Feature): """Immediately after you take the Attack action on your turn, you can spend 1 - ki point to make two unarmed strikes as a bonus action + ki point to make two unarmed strikes as a bonus action. """ @@ -112,7 +112,7 @@ class FlurryOfBlows(Feature): class PatientDefense(Feature): """You can spend 1 ki point to take the Dodge action as a bonus action on your - turn + turn. """ @@ -122,7 +122,7 @@ class PatientDefense(Feature): class StepOfTheWind(Feature): """You can spend 1 ki point to take the Disengage or Dash action as a bonus - action on your turn, and your jump distance is doubled for the turn + action on your turn, and your jump distance is doubled for the turn. """ @@ -170,7 +170,7 @@ class DeflectMissiles(Feature): make a ranged attack with the weapon or piece of ammunition you just caught, as part of the same reaction. You make this attack with proficiency, regardless of your weapon proficiencies, and the - missile counts as a monk weapon for the attack + missile counts as a monk weapon for the attack. """ @@ -196,7 +196,7 @@ class SlowFall(Feature): class ExtraAttackMonk(Feature): """Beginning at 5th level, you can attack twice, instead of once, - whenever you take the Attack action on your turn + whenever you take the Attack action on your turn. """ @@ -209,7 +209,7 @@ class StunningStrike(Feature): opponent's body. When you hit another creature with a melee weapon attack, you can spend 1 ki point to attempt a stunning strike. The target must succeed on a Constitution saving throw or be stunned - until the end of your next turn + until the end of your next turn. """ @@ -220,7 +220,7 @@ class StunningStrike(Feature): class KiEmpoweredStrikes(Feature): """Starting at 6th level, your unarmed strikes count as magical for the purpose of overcoming resistance and immunity to nonmagical - attacks and damage + attacks and damage. """ @@ -230,7 +230,7 @@ class KiEmpoweredStrikes(Feature): class StillnessOfMind(Feature): """Starting at 7th level, you can use your action to end one effect on - yourself that is causing you to be charmed or frightened + yourself that is causing you to be charmed or frightened. """ @@ -318,7 +318,7 @@ class OpenHandTechnique(Feature): - It must succeed on a Dexterity saving throw or be knocked prone. - It must make a Strength saving throw. If it fails, you can push it up to 15 feet away from you. - - It can't take reactions until the end of your next turn + - It can't take reactions until the end of your next turn. """ @@ -330,7 +330,7 @@ class WholenessOfBody(Feature): """At 6th level, you gain the ability to heal yourself. As an action, you can regain hit points equal to three times your monk level. You must finish a long rest before you can use this feature - again + again. """ @@ -344,7 +344,7 @@ class Tranquility(Feature): you gain the effect of a sanctuary spell that lasts until the start of your next long rest (the spell can end early as normal). The saving throw DC for the spell equals 8 + your Wisdom - modifier + your proficiency bonus + modifier + your proficiency bonus. """ @@ -460,13 +460,19 @@ class DiscipleOfTheElements(Feature): points you spend to increase its level) is determined by your monk level, as shown in the Spells and Ki Points table. - Monk Levels 5-8 : 3 Ki points Max + ============ =============================== + Spells and ki points + -------------------------------------------- + Monk Levels Maximum Ki Points for a Spell + ============ =============================== + 5th-8th 3 - Monk Levels 9-12 : 4 Ki points Max + 9th-12th 4 - Monk Levels 13-16 : 5 Ki points Max + 13th-16th 5 - Monk Levels 17-20 : 6 Ki points Max + 17th-20th 6 + ============ =============================== """ @@ -486,7 +492,7 @@ class ElementalAttunement(Feature): - Chill or warm up to 1 pound of nonliving material for up to 1 hour. - Cause earth, fire, water, or mist that can fit within a 1-foot - cube to shape itself into a crude form you desig nate for 1 + cube to shape itself into a crude form you designate for 1 minute. """ @@ -498,7 +504,7 @@ class ElementalAttunement(Feature): class BreathOfWinter(Feature): """You can spend 6 ki points to cast cone of cold. - **Prerequisite:** 17th Level + **Prerequisite:** 17th Level. """ @@ -510,7 +516,7 @@ class BreathOfWinter(Feature): class ClenchOfTheNorthWind(Feature): """You can spend 3 ki points to cast hold person. - **Prerequisite:** 6th Level + **Prerequisite:** 6th Level. """ @@ -522,7 +528,7 @@ class ClenchOfTheNorthWind(Feature): class EternalMountainDefense(Feature): """You can spend 5 ki points to cast stoneskin, targeting yourself. - **Prerequisite:** 11th Level + **Prerequisite:** 11th Level. """ @@ -538,7 +544,7 @@ class FangsOfTheFireSnake(Feature): feet for that action, as well as the rest of the turn. A hit with such an attack deals fire damage instead of bludgeoning damage, and if you spend 1 ki point when the attack hits, it also deals an - extra 1d10 fire damage + extra 1d10 fire damage. """ @@ -574,7 +580,7 @@ class FistOfUnbrokenAir(Feature): class FlamesOfThePhoenix(Feature): """You can spend 4 ki points to cast fireball. - **Prerequisite:** 11th Level + **Prerequisite:** 11th Level. """ @@ -586,7 +592,7 @@ class FlamesOfThePhoenix(Feature): class GongOfTheSummit(Feature): """You can spend 3 ki points to cast shatter. - **Prerequisite:** 6th Level + **Prerequisite:** 6th Level. """ @@ -598,7 +604,7 @@ class GongOfTheSummit(Feature): class MistStance(Feature): """You can spend 4 ki points to cast gaseous form, targeting yourself. - **Prerequisite:** 11th Level + **Prerequisite:** 11th Level. """ @@ -610,7 +616,7 @@ class MistStance(Feature): class RideTheWind(Feature): """You can spend 4 ki points to cast fly, targeting yourself - **Prerequisite:** 11th Level + **Prerequisite:** 11th Level. """ @@ -622,7 +628,7 @@ class RideTheWind(Feature): class RiverOfHungryFlame(Feature): """You can spend 5 ki points to cast wall of fire. - **Prerequisite:** 17th Level + **Prerequisite:** 17th Level. """ @@ -676,7 +682,7 @@ class WaterWhip(Feature): additional ki point you spend, and you can either knock it prone or pull it up to 25 feet closer to you. On a successful save, the creature takes half as much damage, and you don't pull it or knock - it prone + it prone. """ @@ -687,7 +693,7 @@ class WaterWhip(Feature): class WaveOfRollingEarth(Feature): """You can spend 6 ki points to cast wall of stone - **Prerequisite:** 17th Level + **Prerequisite:** 17th Level. """ @@ -699,10 +705,10 @@ class WaveOfRollingEarth(Feature): # Way of the Long Death class TouchOfDeath(Feature): """Starting when you choose this tradition at 3rd level, your study of death - allows you to extract vitality from an- other creature as it nears its + allows you to extract vitality from another creature as it nears its demise. When you reduce a creature within 5 feet of you to 0 hit points, you gain temporary hit points equal to your Wisdom modifier + your monk - level (minimum of 1 temporary hit point) + level (minimum of 1 temporary hit point). """ @@ -713,9 +719,9 @@ class TouchOfDeath(Feature): class HourOfReaping(Feature): """At 6th level, you gain the ability to unsettle or terrify those around you as an action, for your soul has been touched by the shadow of death. When - you take this ac- tion , each creature within 30 feet of you that can see - you must succeed on a Wisdom saving throw or be fright- ened of you until - the end of your next turn + you take this action , each creature within 30 feet of you that can see + you must succeed on a Wisdom saving throw or be frightened of you until + the end of your next turn. """ @@ -726,7 +732,7 @@ class HourOfReaping(Feature): class MasteryOfDeath(Feature): """Beginning at 11th level, you use your familiarity with death to escape its grasp. When you are reduced to 0 hit points, you can expend 1 ki point (no - action required) to have 1 hit point instead + action required) to have 1 hit point instead. """ @@ -739,7 +745,7 @@ class TouchOfTheLongDeath(Feature): creature. As an action, you touch one creature within 5 feet of you, and you expend 1 to 10 ki points. The target must make a Constitution saving throw, and it takes 2d10 necrotic damage per ki point spent on a failed - save, or half as much damage on a suc- cessful one + save, or half as much damage on a successful one. """ @@ -752,7 +758,7 @@ class RadiantSunBolt(Feature): """Starting when you choose this tradition at 3rd level, you can hurl searing bolts of magical radiance. You gain a ranged spell attack that you can use with the Attack action. The attack has a range of 30 feet. You are - proficient with it, and you add your Dexterity modi- fier to its attack and + proficient with it, and you add your Dexterity modifier to its attack and damage rolls. Its damage is radiant, and its damage die is a d4. This die changes as you gain monk levels, as shown in the Martial Arts @@ -810,7 +816,7 @@ class SunShield(Feature): extinguish or restore the light as a bonus action. If a creature hits you with a melee attack while this light shines, you can use you r reaction to deal radiant damage to the creature. The radiant damage equals 5 + your - Wisdom modifier + Wisdom modifier. """ @@ -823,7 +829,7 @@ class DrunkenTechnique(Feature): """At 3rd level, you learn how to twist and turn quickly as part of your Flurry of Blows. Whenever you use Flurry of Blows, you gain the benefit of the Disengage action, and your walking speed increases by 10 feet until the - end of the current turn + end of the current turn. """ @@ -839,7 +845,7 @@ class TipsySway(Feature): by spending 5 feet of movement, rather than half your speed. **Redirect Attack:** When a creature misses you with a melee attack roll, - you can spend 1 ki point as a re- action to cause that attack to hit one + you can spend 1 ki point as a reaction to cause that attack to hit one creature of your choice, other than the attacker, that you can see within 5 feet of you. @@ -850,10 +856,10 @@ class TipsySway(Feature): class DrunkardsLuck(Feature): - """Starting at llth level, you always seem to get a lucky bounce at the right + """Starting at 11th level, you always seem to get a lucky bounce at the right moment. When you make an ability check, an attack roll, or a saving throw - and have disad- vantage on the roll, you can spend 2 ki points to cancel - the disadvantage for that roll + and have disadvantage on the roll, you can spend 2 ki points to cancel + the disadvantage for that roll. """ @@ -862,11 +868,11 @@ class DrunkardsLuck(Feature): class IntoxicatedFrenzy(Feature): - """At 17th level, you gain the ability to make an overwhelm- ing number of + """At 17th level, you gain the ability to make an overwhelming number of attacks against a group of enemies. When you use your Flurry of Blows, you can make up to three additional attacks with it (up to a total of five - Flurry of Blows attacks), provided that each Flurry of Blows at- tack - targets a different creature this turn + Flurry of Blows attacks), provided that each Flurry of Blows attack + targets a different creature this turn. """ @@ -876,14 +882,14 @@ class IntoxicatedFrenzy(Feature): # Way of the Kensei class PathOfTheKensei(Feature): - """When you choose this tradition at 3rd level, your spe- cial martial arts + """When you choose this tradition at 3rd level, your special martial arts training leads you to master the use of certain weapons. This path also includes instruction in the deft strokes of calligraphy or painting. You gain the following benefits. **Kensei Weapons:** Choose two types of weapons to be your kensei weapons: one melee weapon and one ranged weapon. Each of these weapons can be any - sim- ple or martial weapon that lacks the heavy and special properties. The + simple or martial weapon that lacks the heavy and special properties. The longbow is also a valid choice. You gain proficiency with these weapons if you don't already have it. Weapons of the chosen types are monk weapons for you. Many of this tradition's features work only with your kensei @@ -900,11 +906,11 @@ class PathOfTheKensei(Feature): **Kensei's Shot:** You can use a bonus action on your turn to make your ranged attacks with a kensei weapon more deadly. When you do so, any target you hit with a ranged attack using a kensei weapon takes an extra 1d4 - damage of the weapons type. You retain this benefit un- til the end of the + damage of the weapons type. You retain this benefit until the end of the current turn. - **Way ofthe Brush:** You gain proficiency with your choice of - calligrapher's supplies or painter's supplies + **Way of the Brush:** You gain proficiency with your choice of + calligrapher's supplies or painter's supplies. """ @@ -913,11 +919,11 @@ class PathOfTheKensei(Feature): class OneWithTheBlade(Feature): - """At 6th level, you extend your ki into your kensei weap- ons, granting you + """At 6th level, you extend your ki into your kensei weapons, granting you the following benefits. **Magic Kensei Weapons:** Your attacks with your kensei weapons count as - magical for the purpose of over- coming resistance and immunity to + magical for the purpose of overcoming resistance and immunity to nonmagical attacks and damage **Deft Strike:** When you hit a target with a kensei weapon, you can spend @@ -932,13 +938,13 @@ class OneWithTheBlade(Feature): class SharpenTheBlade(Feature): - """At 11th level, you gain the ability to augment your weap- ons further with + """At 11th level, you gain the ability to augment your weapons further with your ki. As a bonus action, you can expend up to 3 ki points to grant one kensei weapon you touch a bonus to attack and damage rolls when you attack with it. The bonus equals the number of ki points you spent. This bonus lasts for 1 minute or until you use this feature again. This feature has no effect on a magic weapon that already has a bonus to attack and damage - rolls + rolls. """ @@ -947,8 +953,8 @@ class SharpenTheBlade(Feature): class UnerringAccuracy(Feature): - """At 17th level, your mastery of weapons grants you ex- traordinary - accuracy. Ifyou miss with an attack roll using a monk weapon on your turn, + """At 17th level, your mastery of weapons grants you extraordinary + accuracy. If you miss with an attack roll using a monk weapon on your turn, you can reroll it. You can use this feature only once on each of your turns. diff --git a/dungeonsheets/features/paladin.py b/dungeonsheets/features/paladin.py index 7d4cb63e..fd6f9d61 100644 --- a/dungeonsheets/features/paladin.py +++ b/dungeonsheets/features/paladin.py @@ -43,7 +43,7 @@ class LayOnHands(Feature): can cure multiple diseases and neutralize multiple poisons with a single use of Lay on Hands, expending hit points separately for each one. - This feature has no effect on undead and constructs + This feature has no effect on undead and constructs. """ @@ -103,7 +103,7 @@ class DivineHealth(Feature): class ExtraAttackPaladin(Feature): """Beginning at 5th level, you can attack twice, instead of once, whenever you - take the Attack action on your turn + take the Attack action on your turn. """ @@ -129,10 +129,9 @@ class AuraOfCourage(Feature): """Starting at 10th level, you and friendly creatures within 10 feet of you can't be frightened while you are conscious. - At 18th level, the range of this aura increases to 30 feet + At 18th level, the range of this aura increases to 30 feet. """ - name = "Aura of Courage" source = "Paladin" @@ -285,6 +284,7 @@ class VowOfEnmity(Feature): see within 10 feet of you, using your Channel Divinity. You gain advantage on attack rolls against the creature for 1 minute or until it drops to 0 hit points or falls unconscious. + """ name = "Channel Divinity: Vow of Enmity" @@ -316,12 +316,13 @@ class AvengingAngel(Feature): """ At 20th level, you can assume the form of an angelic avenger. Using your action, you undergo a transformation. For 1 hour, you gain the following benefits: - * Wings sprout from your back and grant you a flying speed of 60 feet. - * You emanate an aura of menace in a 30-foot radius. The first time any enemy - creature enters the aura or starts its turn there during a battle, the creature - must succeed on a Wisdom saving throw or become frightened of you for 1 minute - or until it takes any damage. Attack rolls against the frightened creature have advantage. - * Once you use this feature, you can't use it again until you finish a long rest.e + - Wings sprout from your back and grant you a flying speed of 60 feet. + - You emanate an aura of menace in a 30-foot radius. The first time any enemy + creature enters the aura or starts its turn there during a battle, the creature + must succeed on a Wisdom saving throw or become frightened of you for 1 minute + or until it takes any damage. Attack rolls against the frightened creature have advantage. + - Once you use this feature, you can't use it again until you finish a long rest. + """ name = "Avenging Angel" @@ -383,15 +384,15 @@ class ProtectiveSpirit(Feature): class EmissaryOfRedemption(Feature): """At 20th level, you become an avatar of peace, which gives you two benefits: - --You have resistance to all damage dealt by other crea- tures (their - attacks, spells, and other effects). + - You have resistance to all damage dealt by other creatures (their + attacks, spells, and other effects). - --Whenever a creature hits you with an attack, it takes radiant damage - equal to half the damage you take from the attack. + - Whenever a creature hits you with an attack, it takes radiant damage + equal to half the damage you take from the attack. 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 - you finish a long rest + you finish a long rest. """ diff --git a/dungeonsheets/features/races.py b/dungeonsheets/features/races.py index 57557c43..df3f96fb 100644 --- a/dungeonsheets/features/races.py +++ b/dungeonsheets/features/races.py @@ -218,22 +218,22 @@ class DraconicAncestry(Feature): Ancestry table. Your breath weapon and damage resistance are determined by the dragon type. - ======== =================== ======================================== + ========== =================== ===================================== Draconic Ancestry - --------------------------------------------------------------------- - 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) + ========== =================== ===================================== """ diff --git a/dungeonsheets/features/ranger.py b/dungeonsheets/features/ranger.py index 4dd26e88..9b07e5c0 100644 --- a/dungeonsheets/features/ranger.py +++ b/dungeonsheets/features/ranger.py @@ -177,7 +177,7 @@ class HideInPlainSight(Feature): 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 + a reaction, you must camouflage yourself again to gain this benefit. """ @@ -202,7 +202,7 @@ class FeralSenses(Feature): 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 + deafened. """ @@ -327,7 +327,7 @@ class Volley(Feature): """You can use your action to make a ranged attack against any number of creatures within 10 feet of 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 + separate attack roll for each target. """ @@ -337,7 +337,7 @@ class Volley(Feature): class WhirlwindAttack(Feature): """You can use your action to make a melee attack against any number of - creatures within 5 feet of you, with a separate attack roll for each target + creatures within 5 feet of you, with a separate attack roll for each target. """ @@ -363,7 +363,7 @@ class MultiattackRanger(FeatureSelector): 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 + creature (other than itself) of your choice. """ @@ -425,7 +425,7 @@ class RangersCompanion(Feature): 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 + Dash, Disengage, Dodge, or Help action on its turn. """ @@ -446,7 +446,7 @@ class BestialFury(Feature): 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 + feet of you. """ @@ -515,7 +515,7 @@ 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 + same action. """ @@ -572,10 +572,10 @@ def name(self): 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 + action, you can cast the etherealness 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 + short or long rest. """ @@ -586,7 +586,7 @@ class EtherealStep(Feature): 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 + before each attack to an unoccupied space you can see. If you attack at least two different creatures with the action, you can make one additional attack with it against a third creature. @@ -600,7 +600,7 @@ 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 + give yourself resistance to all of that attack's damage on this turn. """ @@ -615,7 +615,7 @@ class HuntersSense(Feature): 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 + damage immunities, resistances, 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. @@ -636,7 +636,7 @@ class SlayersPrey(Feature): 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 + long rest. It ends early if you designate a different creature. """ @@ -648,7 +648,7 @@ 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 + targets grapple, add 1d6 to your roll. """ @@ -675,8 +675,8 @@ class SlayersCounter(Feature): 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 + throw. If your attack hits, your save automatically succeeds, in addition + to the attack's normal effects. """ @@ -698,7 +698,7 @@ class FavoredEnemyRevised(Feature): 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 + it. However, you are free to pick any language you wish to learn. """ @@ -807,7 +807,7 @@ class HideInPlainSightRevised(Feature): 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 + motionless and gain this benefit until you are detected. """ @@ -841,7 +841,7 @@ class AnimalCompanion(Feature): 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 + is replaced by the restored companion. """ @@ -898,7 +898,7 @@ class CoordinatedAttack(Feature): class BeastsDefense(Feature): """At 7th level, while your companion can see you, it has advantage on all - saving throw + saving throw. """ @@ -909,7 +909,7 @@ class BeastsDefense(Feature): 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 + attack roll for each target. """ @@ -936,7 +936,7 @@ class UnderdarkScout(Feature): 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 + benefit from its darkvision. """ @@ -948,7 +948,7 @@ 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 + is made, but it must be used before the outcome of the roll is determined. """ diff --git a/dungeonsheets/features/rogue.py b/dungeonsheets/features/rogue.py index 54462da1..30055fb4 100644 --- a/dungeonsheets/features/rogue.py +++ b/dungeonsheets/features/rogue.py @@ -13,7 +13,7 @@ class RogueExpertise(Feature): At 6th level, you can choose two more of your proficiencies (in skills or with thieves' tools) to gain this benefit. - Add these skills to "skill_expertise" in your character.py file + Add these skills to "skill_expertise" in your character.py file. """ @@ -162,7 +162,7 @@ class SecondStoryWork(Feature): 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 + you move no more than half your speed on the same turn. """ @@ -173,7 +173,7 @@ class SupremeSneak(Feature): 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 + ignore all class, race, and level requirements on the use of magic items. """ @@ -212,7 +212,7 @@ class InfiltrationExpertise(Feature): 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 + 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 @@ -232,7 +232,7 @@ class Imposter(Feature): 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 + detection. """ @@ -244,7 +244,7 @@ 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 + a failed save, double the damage of your attack against the creature. """ @@ -280,7 +280,7 @@ class MageHandLegerdemain(Feature): 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 + against the spell this turn. """ @@ -312,7 +312,7 @@ class SpellThief(Feature): 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 + you can't use it again until you finish a long rest. """ @@ -322,7 +322,7 @@ class SpellThief(Feature): # Inquisitive class EarForDeceit(Feature): - """When you choose this archetype at 3rd level, you de- velop a talent for + """When you choose this archetype at 3rd level, you develop 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 d20 as an 8. @@ -336,7 +336,7 @@ class EarForDeceit(Feature): 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 + Intelligence (Investigation) check to uncover or decipher clues. """ @@ -348,11 +348,11 @@ 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 + contested by the target's Charisma (Deception) check. If you succeed, you + can use your Sneak Attack against that target even if you 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 + against a different target. """ @@ -375,7 +375,7 @@ class SteadyAim(Feature): 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 + on the same turn. """ @@ -384,14 +384,14 @@ class SteadyEye(Feature): class UnerringEye(Feature): - """Beginning at 13th level, your senses are almost im« possible to foil. As an + """Beginning at 13th level, your senses are almost impossible 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 + feet of you, 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 + expended uses of it when you finish a long rest. """ @@ -400,7 +400,7 @@ class UnerringEye(Feature): class EyeForWeakness(Feature): - """At 17th level, you learn to exploit a creature's weak- nesses by carefully + """At 17th level, you learn to exploit a creature's weaknesses 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 @@ -430,7 +430,7 @@ 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 + you, rather than within 5 feet of you, if the target can see or hear you. """ @@ -441,7 +441,7 @@ class MasterOfTactics(Feature): 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 + 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: @@ -451,7 +451,7 @@ class InsightfulManipulator(Feature): - 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 + creature's history or one of its personality traits, if it has any. """ @@ -463,8 +463,8 @@ 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 + you can use your reaction to have the attack target that creature instead + of you. """ @@ -475,10 +475,10 @@ class Misdirection(Feature): 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 + a Charisma (Deception) check contested by the mind reader's Wisdom (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 + you so choose, and you can't be compelled to tell the truth by magic. """ @@ -489,8 +489,8 @@ class SoulOfDeceit(Feature): # 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 + can move up to half your speed as a reaction when an enemy ends its turn + within 5 feet of you. This movement doesn't provoke opportunity attacks. """ @@ -502,7 +502,7 @@ 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 + proficiencies. """ @@ -527,7 +527,7 @@ class AmbushMaster(Feature): 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 of your next turn + the start of your next turn. """ @@ -540,7 +540,7 @@ class SuddenStrike(Feature): 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 + same target more than once in a turn. """ @@ -553,7 +553,7 @@ 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 of your turn + against you for the rest of your turn. """ @@ -577,10 +577,10 @@ class RakishAudacity(Feature): class Panache(Feature): - """At 9th level, your charm becomes extraordinarily be- guiling. As an action, + """At 9th level, your charm becomes extraordinarily beguiling. 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 + two of you 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. @@ -590,7 +590,7 @@ class Panache(Feature): 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 + or your companions do anything harmful to it. """ @@ -600,8 +600,8 @@ class Panache(Feature): 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 + advantage on the next Dexterity (Acrobatics) or Strength (Athletics) + check you make during the same turn. """ @@ -611,9 +611,9 @@ class ElegantManeuver(Feature): 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 + into success in combat. If you 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 + until you finish a short or long rest. """ diff --git a/dungeonsheets/features/sorcerer.py b/dungeonsheets/features/sorcerer.py index 76754950..84af516a 100644 --- a/dungeonsheets/features/sorcerer.py +++ b/dungeonsheets/features/sorcerer.py @@ -82,7 +82,7 @@ class DistantSpell(Metamagic): """When you cast a spell that has a range of 5 feet or greater, you can spend 1 sorcery point to double the range of the spell. When you cast a spell that has a range of touch, you can spend 1 sorcery point to make the range - of the spell 30 feet + of the spell 30 feet. """ @@ -114,7 +114,7 @@ class ExtendedSpell(Metamagic): class HeightenedSpell(Metamagic): """When you cast a spell that forces a creature to make a saving throw to resist its effects, you can spend 3 sorcery points to give one target of - the spell disadvantage on its first saving throw made against the spell + the spell disadvantage on its first saving throw made against the spell. """ @@ -300,7 +300,7 @@ class DragonWings(Feature): 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 + manifest them. """ @@ -543,10 +543,10 @@ class HeartOfTheStorm(Feature): 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 + you. If it 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 + choose the direction that the wind blows in a 1OO-foot-radius sphere centered on you. The wind blows in that direction until the end of your next turn. This feature doesn't alter the speed of the wind. @@ -573,7 +573,7 @@ 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 + 30 feet of you 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. diff --git a/dungeonsheets/features/warlock.py b/dungeonsheets/features/warlock.py index 3deaad3a..3bc92bd5 100644 --- a/dungeonsheets/features/warlock.py +++ b/dungeonsheets/features/warlock.py @@ -21,6 +21,22 @@ class EldritchInvocation(Feature): name = "Eldritch Invocations" source = "Warlock" + at_will_spells = () + + def cast_spell_at_will(self, spell): + s = spell() + s.level = 0 + if "M" in s.components: + c = list(s.components) + c.remove("M") + s.components = tuple(c) + self.spells_known += (s,) + self.spells_prepared += (s,) + + def __init__(self, owner): + super().__init__(owner) + for s in self.at_will_spells: + self.cast_spell_at_will(s) class PactOfTheChain(Feature): @@ -164,9 +180,12 @@ class EldritchVersatility(Feature): Improvement feature, you can do one of the following, representing a change of focus in your occult studies: - * Replace one cantrip you learned from this class's Pact Magic feature with another cantrip from the warlock spell list. - * Replace the option you chose for the Pact Boon feature with one of that feature's other options. - * If you're 12th level or higher, replace one spell from your Mystic Arcanum feature with another warlock spell of the same level. + - Replace one cantrip you learned from this class's Pact Magic feature with + another cantrip from the warlock spell list. + - Replace the option you chose for the Pact Boon feature with one of that + feature's other options. + - If you're 12th level or higher, replace one spell from your Mystic + Arcanum feature with another warlock spell of the same level. If this change makes you ineligible for any of your Eldritch Invocations, you must also replace them now, choosing invocations for which you qualify. @@ -199,7 +218,7 @@ class MistyEscape(Feature): 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 + short or long rest. """ @@ -395,7 +414,7 @@ class DefyDeath(Feature): class UndyingNature(Feature): - """Beginning at 10th level , you can hold your breath indefinitely, and you + """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 @@ -459,7 +478,7 @@ class WarlockRadiantSoul(Feature): 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 + + short or long rest. These temporary 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. @@ -531,7 +550,7 @@ class HexWarrior(Feature): def weapon_func(self, weapon: weapons.Weapon, **kwargs): """ Swap the weapon's attack bonus modifier for Charisma if - it is higher than STR/DEX bonus + it is higher than STR/DEX bonus. """ if weapon.is_finesse: abils = { @@ -552,7 +571,7 @@ class AccursedSpecter(Feature): temporarily binding it to your service. When you slay a humanoid, you can cause its Spirit to rise from its corpse as a specter, the statistics for which are in the Monster Manual. When the specter appears, it gains - temporary hit points equal to halfyour warlock level. Roll initiative for + temporary hit points equal to half your warlock level. Roll initiative for the specter, which has its own turns. It obeys your verbal commands, and it gains a special bonus to its attack rolls equal to your Charisma modifier (minimum of +0). @@ -693,16 +712,16 @@ class GeniesVessel(Feature): The vessel is a Tiny object, and you can use it as a spellcasting focus for your warlock spells. You decide what the object is, or you can determine what it is randomly by rolling on the Genie's Vessel table. - == ======================== - d6 Vessel - == ======================== - 1 Oil Lamp - 2 Urn - 3 Ring with a Compartment - 4 Stoppered Bottle - 5 Hollow Statuette - 6 Ornate Lantern - == ======================== + ==== =========================== + d6 Vessel + ==== =========================== + 1 Oil Lamp + 2 Urn + 3 Ring with a Compartment + 4 Stoppered Bottle + 5 Hollow Statuette + 6 Ornate Lantern + ==== =========================== While you are touching the vessel, you can use it in the following ways: @@ -780,29 +799,7 @@ class LimitedWish(Feature): # All Invocations -class Invocation(Feature): - """ - A generic Eldritch Invocation. Add details in features/warlock.py - """ - - name = "Unnamed Invocation" - source = "Warlock (Eldritch Invocations)" - at_will_spells = () - - def cast_spell_at_will(self, spell): - s = spell() - s.level = 0 - if "M" in s.components: - c = list(s.components) - c.remove("M") - s.components = tuple(c) - self.spells_known += (s,) - self.spells_prepared += (s,) - - def __init__(self, owner): - super().__init__(owner) - for s in self.at_will_spells: - self.cast_spell_at_will(s) +Invocation = EldritchInvocation # PHB @@ -829,7 +826,7 @@ class AscendantStep(Invocation): """You can cast levitate on yourself at will, without expending a spell slot or material components. - **Prerequisite: 9th level** + **Prerequisite**: 9th level. """ @@ -855,7 +852,7 @@ class BewitchingWhispers(Invocation): """You can cast compulsion once using a warlock spell slot. You can't do so again until you finish a long rest. - **Prerequisite**: 7th Level + **Prerequisite**: 7th Level. """ name = "Bewitching Whispers" @@ -888,7 +885,7 @@ class ChainsOfCarceri(Invocation): finish a long rest before you can use this invocation on the same creature again. - **Prerequisites**: 15th level, Pact of the Chain Feature + **Prerequisites**: 15th level, Pact of the Chain Feature. """ name = "Chains of Carceri" @@ -962,7 +959,7 @@ class LifeDrinker(Invocation): """When you hit a creature with your pact weapon, the creature takes extra necrotic damage equal to your Charisma modifier (minimum 1). - **Prerequisite**: 12th Level, Pact of the Blade + **Prerequisite**: 12th Level, Pact of the Blade. """ name = "Life Drinker" @@ -980,7 +977,7 @@ class MasterOfMyriadForms(Invocation): """ You can cast alter self at will, without expending a spell slot. - **Prerequisite**: 15th Level + **Prerequisite**: 15th Level. """ name = "Master of Myriad Forms" @@ -991,7 +988,7 @@ class MinionsOfChaos(Invocation): """You can cast conjure elemental once using a warlock spell slot. You can't do so again until you finish a long rest. - **Prerequisite**: 9th Level + **Prerequisite**: 9th Level. """ name = "Minions of Chaos" @@ -1020,7 +1017,7 @@ class OneWithShadows(Invocation): """When you are in an area of dim light or darkness, you can use your action to become invisible until you move or take an action or a reaction. - **Prerequisite**: 5th Level + **Prerequisite**: 5th Level. """ name = "One with Shadows" @@ -1030,7 +1027,7 @@ class OtherworldlyLeap(Invocation): """You can cast jump on yourself at will, without expending a spell slot or material components. - **Prerequisite**: 9th Level + **Prerequisite**: 9th Level. """ @@ -1051,7 +1048,7 @@ class SculptorOfFlesh(Invocation): """You can cast polymorph once using a warlock spell slot. You can't do so again until you finish a long rest. - **Prerequisite**: 7th Level + **Prerequisite**: 7th Level. """ name = "Sculptor of Flesh" @@ -1061,7 +1058,7 @@ class SignOfIllOmen(Invocation): """You can cast bestow curse once using a warlock spell slot. You can't do so again until you finish a long rest. - **Prerequisite**: 5th Level + **Prerequisite**: 5th Level. """ @@ -1081,7 +1078,7 @@ class ThirstingBlade(Invocation): """You can attack with your pact weapon twice, instead of once, whenever you take the Attack action on your turn. - **Prerequisite**: 5th Level, Pact of the Blade + **Prerequisite**: 5th Level, Pact of the Blade. """ name = "Thirsting Blade" @@ -1091,7 +1088,7 @@ class VisionsOfDistantRealms(Invocation): """ You can cast arcane eye at will, without expending a spell slot. - **Prerequisite**: 15th level + **Prerequisite**: 15th level. """ name = "Visions of Distant Realms" @@ -1105,7 +1102,7 @@ class VoiceOfTheChainMaster(Invocation): you can also speak through your familiar in your own voice, even if your familiar is normally incapable of speech. - **Prerequisite**: Pact of the Chain + **Prerequisite**: Pact of the Chain. """ @@ -1115,7 +1112,7 @@ class VoiceOfTheChainMaster(Invocation): class WhispersOfTheGrave(Invocation): """You can cast speak with dead at will, without expending a spell slot. - **Prerequsite**: 9th Level + **Prerequsite**: 9th Level. """ @@ -1139,14 +1136,14 @@ class AspectOfTheMoon(Invocation): gain the benefits of a long rest, you can spend all 8 hours doing light activity, such as reading your Book of Shadows and keeping watch. - **Prerequisite**: Pact of the Tome + **Prerequisite**: Pact of the Tome. """ name = "Aspect of the Moon" class CloakOfFlies(Invocation): - """As a bonus action, you can surround yourselfwith a magical aura that looks + """As a bonus action, you can surround yourself with a magical aura that looks 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 dismiss it as a bonus action. @@ -1159,7 +1156,7 @@ class CloakOfFlies(Invocation): Once you use this invocation, you can't use it again until you finish a short or long rest. - **Prerequisite**: 5th level + **Prerequisite**: 5th level. """ name = "Cloak of Flies" @@ -1171,7 +1168,7 @@ class EldritchSmite(Invocation): another 1d8 per level of the spell slot, and you can knock the target prone if it is Huge or smaller. - **Prerequisite**: 5th level, Pact of the Blade + **Prerequisite**: 5th level, Pact of the Blade. """ @@ -1188,7 +1185,7 @@ class GhostlyGaze(Invocation): Once you use this invocation, you can't use it again until you finish a short or long rest. - **Prerequisite**: 7th level + **Prerequisite**: 7th level. """ name = "Ghostly Gaze" @@ -1199,7 +1196,7 @@ class GiftOfTheDepths(Invocation): 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. - **Prerequisite**: 5th level + **Prerequisite**: 5th level. """ name = "Gift of the Depths" @@ -1210,7 +1207,7 @@ class GiftOfTheEverLivingOnes(Invocation): ofyou, treat any dice rolled to determine the hit points you regain as having rolled their maximum value for you. - **Prerequisite**: Pact of the Chain + **Prerequisite**: Pact of the Chain. """ name = "Gift of the Ever-Living Ones" @@ -1227,7 +1224,7 @@ class GraspOfHadar(Invocation): class ImprovedPactWeapon(Invocation): """You can use any weapon you summon with your Pact of the Blade feature as a - spellcasting focus for your waru lock spells. + spellcasting focus for your warlock spells. In addition, the weapon gains a +1 bonus to its attack and damage rolls, unless it is a magic weapon that already has a bonus to those rolls. @@ -1235,14 +1232,14 @@ class ImprovedPactWeapon(Invocation): Finally, the weapon you conjure can be a shortbow, longbow, light crossbow, or heavy crossbow. - **Prerequisite**: Pact of the Blade + **Prerequisite**: Pact of the Blade. """ name = "Improved Pact Weapon" def weapon_func(self, weapon: weapons.Weapon, **kwargs): """ - Add +1 to attack and damage if magic is not already magic + Add +1 to attack and damage if magic is not already magic. """ if (weapon.attack_bonus == 0) or (weapon.damage_bonus == 0): weapon.attack_bonus += 1 @@ -1268,7 +1265,7 @@ class MaddeningHex(Invocation): damage). To use this invocation, you must be able to see the cursed target, and it must be within 30 feet of you. - **Prerequisite**: 5th level + **Prerequisite**: 5th level. """ name = "Maddening Hex" @@ -1289,7 +1286,7 @@ class RelentlessHex(Invocation): class ShroudOfShadow(Invocation): """You can cast invisibility at will, without expending a spell slot. - **Prerequisite**: 15th Level + **Prerequisite**: 15th Level. """ @@ -1309,7 +1306,7 @@ class TombOfLevistus(Invocation): Once you use this invocation, you can't use it again until you finish a short or long rest. - **Prerequisite**: 5th Level + **Prerequisite**: 5th Level. """ @@ -1333,7 +1330,7 @@ class BondOfTheTalisman(Invocation): to teleport to you. The teleportation can be used a number of times equal to your proficiency bonus, and all expended uses are restored when you finish a long rest. - **Prerequisite**: 12th Level, Pact of the Talisman + **Prerequisite**: 12th Level, Pact of the Talisman. """ @@ -1358,7 +1355,7 @@ class FarScribe(Invocation): page, rather than in your mind. The writing disappears after 1 minute. As an action, you can magically erase a name on the page by touching it. - **Prerequisite**: 5th Level, Pact of the Tome + **Prerequisite**: 5th Level, Pact of the Tome. """ @@ -1372,7 +1369,7 @@ class GiftOfTheProtectors(Invocation): the creature magically drops to 1 hit point instead. Once this magic is triggered, no creature can benefit from it until you finish a long rest. As an action, you can magically erase a name on the page by touching it. - **Prerequisite**: 9th Level, Pact ofthe Tome + **Prerequisite**: 9th Level, Pact of the Tome. """ @@ -1389,7 +1386,7 @@ class InvestmentOfTheChainMaster(Invocation): * If the familiar forces a creature to make a saving throw, it uses your spell save DC. * When the familiar takes damage, you can use your reaction to grant it resistance against that damage. - **Prerequisite**: Pact of the Chain + **Prerequisite**: Pact of the Chain. """ name = "Investment of the Chain Master" @@ -1400,7 +1397,7 @@ class ProtectionOfTheTalisman(Invocation): potentially turning the save into a success. This benefit can be used a number of times equal to your proficiency bonus, and all expended uses are restored when you finish a long rest. - **Prerequisite**: 7th Level, Pact of the Talisman + **Prerequisite**: 7th Level, Pact of the Talisman. """ name = "Protection of the Talisman" @@ -1411,7 +1408,7 @@ class RebukeOfTheTalisman(Invocation): your reaction to deal psychic damage to the attacker equal to your proficiency bonus and push it up to 10 feet away from the talisman's wearer. - **Prerequisite**: Pact of the Talisman + **Prerequisite**: Pact of the Talisman. """ name = "Rebuke of the Talisman" @@ -1421,7 +1418,7 @@ class UndyingServitude(Invocation): """You can cast animate dead without using a spell slot. Once you do so, you can't cast it in this way again until you finish a long rest. - **Prerequisite**: 5th Level + **Prerequisite**: 5th Level. """ name = "Undying Servitude" diff --git a/dungeonsheets/features/wizard.py b/dungeonsheets/features/wizard.py index 5a3bfa06..e1b90fdb 100644 --- a/dungeonsheets/features/wizard.py +++ b/dungeonsheets/features/wizard.py @@ -11,7 +11,7 @@ class ArcaneRecovery(Feature): 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 of spell slots. You can recover either a - 2nd-level spell slot or two 1st-level spell slots + 2nd-level spell slot or two 1st-level spell slots. """ @@ -85,7 +85,7 @@ 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 + warded creature takes any remaining damage. """ @@ -107,7 +107,7 @@ class ImprovedAbjuration(Feature): class SpellResistance(Feature): """Starting at 14th level, you have advantage on saving throws against - spells. Furthermore, you have resistance against the damage of spells + spells. Furthermore, you have resistance against the damage of spells. """ @@ -157,7 +157,7 @@ class BenignTransposition(Feature): 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 + spell, your concentration can't be broken as a result of taking damage. """ @@ -167,7 +167,7 @@ class FocusedConjuration(Feature): class DurableSummons(Feature): """Starting at 14th level, any creature that you summon or create with a - conjuration spell has 30 temporary hit points + conjuration spell has 30 temporary hit points. """ @@ -194,7 +194,7 @@ class Portent(Feature): 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 + unused foretelling rolls. """ @@ -221,16 +221,17 @@ class TheThirdEye(Feature): 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 + 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. """ @@ -241,7 +242,7 @@ class TheThirdEye(Feature): 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 + for your Portent feature, rather than two. """ @@ -252,7 +253,7 @@ class GreaterPortent(Feature): # 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 + must spend to copy an enchantment spell into your spellbook is halved. """ @@ -275,7 +276,7 @@ class HypnoticGaze(Feature): 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 + until you finish a long rest. """ @@ -287,7 +288,7 @@ 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 + attacker must make a Wisdom 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 @@ -352,7 +353,7 @@ class SculptSpells(Feature): 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 + would normally take half damage on a successful save. """ @@ -364,7 +365,7 @@ 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 + but suffers no additional effect from the cantrip. """ @@ -374,7 +375,7 @@ class PotentCantrip(Feature): class EmpoweredEvocation(Feature): """Beginning at 10th level, you can add your Intelligence modifier to the - damage roll of any wizard evocation spell you cast + damage roll of any wizard evocation spell you cast. """ @@ -426,7 +427,7 @@ 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 + that you can see the illusion. """ @@ -439,7 +440,7 @@ class IllusorySelf(Feature): 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 + automatically misses you, then the illusion dissipates. Once you use this feature, you can't use it again until you finish a short or long rest. """ @@ -450,13 +451,13 @@ class IllusorySelf(Feature): 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 + your illusions to give them a semireality. 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 + cross. The object can't deal damage or otherwise directly harm anyone. """ @@ -481,7 +482,9 @@ class GrimHarvest(Feature): 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""" + undead. + + """ name = "Grim Harvest" source = "Wizard (School of Necromancy)" @@ -497,7 +500,7 @@ class UndeadThralls(Feature): - 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 + rolls. """ @@ -510,7 +513,7 @@ 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 + some of their worst effects. """ @@ -529,7 +532,7 @@ class CommandUndead(Feature): 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 + breaks free. """ @@ -557,7 +560,7 @@ class MinorAlchemy(Feature): 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 + reverts to its original substance. """ @@ -583,7 +586,7 @@ class TransmutersStone(Feature): 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 + ceases to function. """ @@ -598,7 +601,7 @@ class Shapechanger(Feature): 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 + using an available spell slot. """ @@ -614,22 +617,23 @@ class MasterTransmuter(Feature): 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 + 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. """ @@ -644,7 +648,7 @@ class Bladesong(Feature): 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 + incapacitated, 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). @@ -678,7 +682,7 @@ class ExtraAttackBladesinging(Feature): class SongOfDefense(Feature): - """Beginning at 10th level, you can direct your magic to ab- sorb damage + """Beginning at 10th level, you can direct your magic to absorb 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. @@ -691,7 +695,7 @@ class SongOfDefense(Feature): 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 + to the damage of your melee weapon attacks while your Bladesong is active. """ @@ -702,7 +706,7 @@ class SongOfVictory(Feature): # 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, + against harm. When you are hit by an attack 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. @@ -731,13 +735,13 @@ class PowerSurge(Feature): 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 + end a spell with dispel magic or counterspell, 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 + 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. + target. The extra damage equals half your wizard level. """ @@ -758,7 +762,7 @@ class DurableMagic(Feature): 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 + magic. When you use your Arcane Deflection feature, you can cause magical energy to are from you. Up to three creatures of your choice that you can see within 60 feet of you each take force damage equal to half your wizard level. diff --git a/dungeonsheets/fill_pdf_template.py b/dungeonsheets/fill_pdf_template.py index f58d2204..00c581a8 100644 --- a/dungeonsheets/fill_pdf_template.py +++ b/dungeonsheets/fill_pdf_template.py @@ -143,7 +143,11 @@ def create_character_pdf_template(character, basename, flatten=False): try: fields[skill_boxes[skill.replace(" ", "_").lower()]] = CHECKBOX_ON except KeyError: - raise KeyError(f"Unknown skill: '{skill}'") + if r"[" in skill: + msg = f"You still have skills to select: '{skill}'" + warnings.warn(msg) + else: + raise KeyError(f"Unknown skill: '{skill}'") # Add weapons weapon_fields = [ ("Wpn Name", "Wpn1 AtkBonus", "Wpn1 Damage"), @@ -171,7 +175,7 @@ def create_character_pdf_template(character, basename, flatten=False): # Other proficiencies and languages prof_text = "" for prof_type, values in character.proficiencies_by_type.items(): - if not values == "": + if not (prof_type == "Optional" or values == ""): prof_text += prof_type + ": " + values + ".\n\n" prof_text += "Languages: " + text_box(character.languages) fields["ProficienciesLang"] = prof_text @@ -306,7 +310,7 @@ def spell_level(x): # Determine which sheet to use (caster or half-caster). # Prefer caster, unless we have no spells > 5th level and # would overflow the caster sheet, then use half-caster. - only_low_level = all((character.spell_slots(level) == 0 for level in range(6, 10))) + only_low_level = not any(spell.level > 5 for spell in character.spells) would_overflow_fullcaster = any( ( len([spl for spl in character.spells if spl.level == level]) diff --git a/dungeonsheets/forms/character_sheet_template.html b/dungeonsheets/forms/character_sheet_template.html index 0ba51a32..4ec84ca4 100644 --- a/dungeonsheets/forms/character_sheet_template.html +++ b/dungeonsheets/forms/character_sheet_template.html @@ -112,8 +112,12 @@

Abilities, Savings Throws, and Skills

Proficiencies

-
Proficiencies
-
[[ character.proficiencies_text ]]
+ [% if character.proficiencies_by_type %][% for prof_type, values in character.proficiencies_by_type.items() %] + [%- if not (prof_type == "Optional" or values == ""): -%] +
[[ prof_type ]]:
+
[[ values ]].
+ [% endif %] + [%- endfor -%][%- endif -%]
Languages
[[ character.languages ]]
diff --git a/dungeonsheets/forms/MSavage_template.tex b/dungeonsheets/forms/character_sheet_template.tex similarity index 99% rename from dungeonsheets/forms/MSavage_template.tex rename to dungeonsheets/forms/character_sheet_template.tex index 35d3e427..262ee938 100644 --- a/dungeonsheets/forms/MSavage_template.tex +++ b/dungeonsheets/forms/character_sheet_template.tex @@ -5,8 +5,6 @@ \usepackage{ifthen} \usepackage{pstricks} -\usepackage[UKenglish]{babel} - \usepackage{dndtemplate} \usepackage{bookmark} @@ -180,7 +178,7 @@ \OtherProficienciesLanguages{\textbf{Languages:} [[ char.languages ]]. \\ [%- for prof_type, values in char.proficiencies_by_type.items() %] - [%- if not values == "": %] + [%- if not (prof_type == "Optional" or values == ""): %] \textbf{[[ prof_type ]]}: [[ values ]]. \\ [%- endif -%] [%- endfor -%] diff --git a/dungeonsheets/forms/empty_template.txt b/dungeonsheets/forms/empty_template.txt index b67f1c74..b992fcc7 100644 --- a/dungeonsheets/forms/empty_template.txt +++ b/dungeonsheets/forms/empty_template.txt @@ -54,8 +54,8 @@ features = () feature_choices = () # Weapons/other proficiencies not given by class/race/background -weapon_proficiencies = () # ex: ('shortsword', 'quarterstaff') -proficiencies_text = () # ex: ("thieves' tools",) +weapon_proficiencies = {{ char.optional_weapon_proficiencies }} # ex: ('shortsword', 'quarterstaff') +proficiencies_text = {{ char.proficiencies_text }} # ex: ("thieves' tools",) # Proficiencies and languages languages = """{{ char.languages }}""" diff --git a/dungeonsheets/forms/features_template.tex b/dungeonsheets/forms/features_template.tex index 2949297c..7482c14c 100644 --- a/dungeonsheets/forms/features_template.tex +++ b/dungeonsheets/forms/features_template.tex @@ -1,19 +1,25 @@ -\pdfbookmark[0]{Features}{Features} -\section*{Features} -[% if use_dnd_decorations %] - [%- for feat in character.features %] - \pdfbookmark[1]{[[ feat.name ]]}{Features - [[ feat.name ]]} - \DndFeatHeader{[[ feat.name ]]}[Source: [[ feat.source ]]] - [[- feat.__doc__|rst_to_latex(use_dnd_decorations=use_dnd_decorations) -]] - [%- endfor -%] -[% else %] - [%- for feat in character.features %] - \pdfbookmark[1]{[[ feat.name ]]}{Features - [[ feat.name ]]} - \subsection*{[[ feat.name ]]} - \textbf{Source:} [[ feat.source ]] \\ +[%- if feat_order -%] + [%- set feat_dict = character.features_by_type -%] +[%- else -%] + [%- set feat_dict = {"Features": character.features} -%] +[%- endif -%] +[%- for feat_type, feat_list in feat_dict.items() -%] + [%- if feat_list|length -%] + \pdfbookmark[0]{[[ feat_type ]]}{[[ feat_type ]]} + \section*{[[ feat_type ]]} + [% endif %] + [%- for feat in feat_list -%] + [%- if use_dnd_decorations %] + \pdfbookmark[1]{[[ feat.name ]]}{[[ feat_type ]] - [[ feat.name ]]} + \DndFeatHeader{[[ feat.name ]]}[Source: [[ feat.source ]]] + [%- else %] + \pdfbookmark[1]{[[ feat.name ]]}{[[ feat_type ]] - [[ feat.name ]]} + \subsection*{[[ feat.name ]]} + \textbf{Source:} [[ feat.source ]] + [%- endif %] [%- if feat.needs_implementation %] \textbf{**Not included in stats on Character Sheet} - [%- endif -%] - [[- feat.__doc__|rst_to_latex -]] - [%- endfor -%] -[% endif %] + [%- endif %] + [[ feat.__doc__|rst_to_latex(use_dnd_decorations=use_dnd_decorations) ]] + [% endfor %] +[%- endfor %] diff --git a/dungeonsheets/forms/preamble.tex b/dungeonsheets/forms/preamble.tex index 4254095d..2548ee62 100644 --- a/dungeonsheets/forms/preamble.tex +++ b/dungeonsheets/forms/preamble.tex @@ -109,7 +109,9 @@ [% raw %] \usepackage{longtable,ltcaption,array} \setlength{\extrarowheight}{2pt} -\newlength{\DUtablewidth} % internal use in tables +% internal use in tables +\newlength{\DUtablewidth} +\newcommand{\DUcolumnwidth}[1]{\dimexpr#1\DUtablewidth-2\tabcolsep\relax} % admonition (specially marked topic) \providecommand{\DUadmonition}[2][class-arg]{% % try \DUadmonition#1{#2}: diff --git a/dungeonsheets/latex.py b/dungeonsheets/latex.py index 124aa407..8012e715 100644 --- a/dungeonsheets/latex.py +++ b/dungeonsheets/latex.py @@ -4,6 +4,7 @@ import re import subprocess import logging +import warnings from docutils import core from docutils.writers.latex2e import Writer, Table, LaTeXTranslator @@ -50,7 +51,8 @@ def create_latex_pdf( basename: str, keep_temp_files: bool = False, use_dnd_decorations: bool = False, - comm1: str = "pdflatex" + use_tex_template: bool = False, + comm1: str = "pdflatex", ): # Create tex document tex_file = f"{basename}.tex" @@ -69,14 +71,39 @@ def create_latex_pdf( str(tex_file), ] + # Deal with TEXINPUTS and add paths to latex modules environment = os.environ tex_env = environment.get('TEXINPUTS', '') module_root = Path(__file__).parent / "modules/" - module_dirs = [module_root / mdir for mdir in ["DND-5e-LaTeX-Template"]] + module_dirs = [] + + # Load locally installed latex packages if they exist, to allow for + # local latex customisation + for module in ["dnd.sty", "dndtemplate.sty"]: + kpsewhich_command = [ + "kpsewhich", + module, + ] + try: + module_check = subprocess.run(kpsewhich_command, capture_output=True, env=environment, text=True) + if module in module_check.stdout: + module_dirs.append(Path(module_check.stdout).parent) + except FileNotFoundError: + msg = ('Could not run kpsewhich. Something seems strange with your latex installation.') + warnings.warn(msg) + + module_dirs.extend( + [module_root / mdir for mdir in ["DND-5e-LaTeX-Template", "DND-5e-LaTeX-Character-Sheet-Template"]] + ) log.debug(f"Loading additional modules from {module_dirs}.") texinputs = ['.', *module_dirs, module_root, tex_env] - separator = ';' if isinstance(module_root, pathlib.WindowsPath) else ':' + # Two (back-)slashes at the end of each path to recursively add all subdirectories + separator = '\\\\;' if isinstance(module_root, pathlib.WindowsPath) else '//:' environment['TEXINPUTS'] = separator.join(str(path) for path in texinputs) + if use_tex_template: + environment['TTFONTS'] = environment['TEXINPUTS'] + + # Prepare the latex subprocess passes = 2 if use_dnd_decorations else 1 log.debug(tex_command_line) log.debug("LaTeX command: %s" % " ".join(tex_command_line)) @@ -164,6 +191,8 @@ def latex_parts( "input_encoding": input_encoding, "doctitle_xform": doctitle, "initial_header_level": initial_header_level, + "use_latex_citations": True, + "legacy_column_widths": False, } writer = LatexWriter() parts = core.publish_parts( @@ -232,11 +261,9 @@ def rst_to_latex(rst, top_heading_level: int=0, format_dice: bool = True, use_dn transformed_header = header for width in colwidths: # Transform the column width by dividing it by the initial table width - transformed_width = round( float(width) / tablewidth, 3) - # Subtract the table column separation spaces from the transformed column width - transformed_width = r"\\dimexpr " + str(transformed_width) + r"\\DUtablewidth -2\\tabcolsep" + transformed_width = str(round( float(width) / tablewidth, 3)) # Replace the original width with the transformed width - transformed_header = re.sub(width + r"\\DUtablewidth", + transformed_header = re.sub(width, transformed_width, transformed_header) # Replace the original table header with the transformed one @@ -248,7 +275,6 @@ def rst_to_latex(rst, top_heading_level: int=0, format_dice: bool = True, use_dn # Next, take the first table row and define it as the first page table header: tex = re.sub(r"(begin{DndLongTable}\[header=.*?)\](.*?)\n(.*?\\\\)\n\n", r"\1,firsthead={\3 }]\2\n", tex, flags=re.M|re.DOTALL) - return tex @@ -264,8 +290,8 @@ def rst_to_boxlatex(rst): return tex -def msavage_spell_info(char): - """Generates the spellsheet for msavage template.""" +def latex_character_spell_info(char): + """Generates the spellsheet for the latex character template.""" headinfo = char.spell_casting_info["head"] font_options = {1:"", 2:r"\Large ", 3:r"\large "} selector = min(len(char.spellcasting_classes), 3) @@ -323,9 +349,8 @@ def msavage_spell_info(char): # Only use halfcaster when we have no spells > 5th level and # would overflow the fullcaster sheet. # Keep the same sheet for overflow pages, if any. - only_low_level = all((char.spell_slots(level) == 0 for level in range(6, 10))) if (any(len(spellList[key]) > fullcaster_sheet_spaces[key] for key in spellList.keys()) - and only_low_level): + and not any(name in spellList.keys() for name in level_names[6:10])): fullcaster = False def AddSpellPage(fullcaster = True): diff --git a/dungeonsheets/magic_items.py b/dungeonsheets/magic_items.py index 87143cc1..7dacce1e 100644 --- a/dungeonsheets/magic_items.py +++ b/dungeonsheets/magic_items.py @@ -27,6 +27,8 @@ class MagicItem: The rarity of this magic item, as a human-readable string. item_type The type of item: "armor", "weapon", etc. + weight + The item's weight. ac_bonus Provides an armor class bonus to any creature equipping this item. st_bonus_all @@ -51,6 +53,7 @@ class MagicItem: # needs_implementation: bool = False rarity: str = "" item_type: str = "" + weight: int = 0 # Bonuses ac_bonus: int = 0 st_bonus_all: int = 0 @@ -392,10 +395,10 @@ class CharlatansDie(MagicItem): class PipeOfSmokeMonsters(MagicItem): - """While smoking this pipe, you can use an action to ex- hale a puff of smoke - that takes the form of a single crea- ture, such as a dragon, a flumph, or + """While smoking this pipe, you can use an action to exhale a puff of smoke + that takes the form of a single creature, such as a dragon, a flumph, or a froghemoth. The form must be small enough to fit in a 1-foot cube and - loses its shape after a few seconds, becoming an ordi- nary puff of smoke. + loses its shape after a few seconds, becoming an ordinary puff of smoke. """ diff --git a/dungeonsheets/make_sheets.py b/dungeonsheets/make_sheets.py index 623c8207..eebaf0e1 100644 --- a/dungeonsheets/make_sheets.py +++ b/dungeonsheets/make_sheets.py @@ -56,7 +56,7 @@ jinja_env.filters["rst_to_html"] = epub.rst_to_html jinja_env.filters["to_heading_id"] = epub.to_heading_id jinja_env.filters["boxed"] = latex.rst_to_boxlatex -jinja_env.filters["spellsheetparser"] = latex.msavage_spell_info +jinja_env.filters["spellsheetparser"] = latex.latex_character_spell_info jinja_env.filters["monsterdoc"] = latex.RPGtex_monster_info # Custom types @@ -72,7 +72,8 @@ def __call__( character: Character, content_suffix: str = "tex", use_dnd_decorations: bool = False, - spell_order: bool = False + spell_order: bool = False, + feat_order: bool = False, ): template = jinja_env.get_template( self.template_name.format(suffix=content_suffix) @@ -81,6 +82,7 @@ def __call__( character=character, use_dnd_decorations=use_dnd_decorations, spell_order=spell_order, + feat_order=feat_order, ordinals=ORDINALS, ) @@ -164,6 +166,7 @@ def make_sheet( debug: bool = False, use_tex_template: bool = False, spell_order: bool = False, + feat_order: bool = False, ): """Make a character or GM sheet into a PDF. Parameters @@ -204,6 +207,7 @@ def make_sheet( debug=debug, use_tex_template=use_tex_template, spell_order=spell_order, + feat_order=feat_order, ) return ret @@ -394,6 +398,7 @@ def make_character_content( content_format: str, fancy_decorations: bool = False, spell_order: bool = False, + feat_order: bool = False, ) -> List[str]: """Prepare the inner content for a character sheet. @@ -455,6 +460,7 @@ def make_character_content( character, content_suffix=content_format, use_dnd_decorations=fancy_decorations, + feat_order=feat_order, ) ) if character.magic_items: @@ -512,7 +518,7 @@ def make_character_content( return content -def msavage_sheet(character, basename, debug=False): +def latex_character_sheet(character, basename, debug=False): """Another adaption. All changes can be easily included as options in the orignal functions, though.""" @@ -533,7 +539,7 @@ def msavage_sheet(character, basename, debug=False): character.images = [(character.symbol, 1, 488, 564, 145, 112)] + character.images break - tex = jinja_env.get_template("MSavage_template.tex").render( + tex = jinja_env.get_template("character_sheet_template.tex").render( char=character, portrait=portrait_command ) latex.create_latex_pdf( @@ -541,7 +547,8 @@ def msavage_sheet(character, basename, debug=False): basename=basename, keep_temp_files=debug, use_dnd_decorations=True, - comm1="xelatex", + comm1="lualatex", + use_tex_template=True, ) @@ -554,6 +561,7 @@ def make_character_sheet( debug: bool = False, use_tex_template: bool = False, spell_order: bool = False, + feat_order: bool = False, ): """Prepare a PDF character sheet from the given character file. @@ -585,7 +593,6 @@ def make_character_sheet( char_base = basename + "_char" person_base = basename + "_person" sheets = [char_base + ".pdf"] - pages = [] # Prepare the tex/html content content_suffix = format_suffixes[output_format] # Create a list of features and magic items @@ -594,11 +601,12 @@ def make_character_sheet( content_format=content_suffix, fancy_decorations=fancy_decorations, spell_order=spell_order, + feat_order=feat_order, ) # Typeset combined LaTeX file if output_format == "pdf": if use_tex_template: - msavage_sheet( + latex_character_sheet( character=character, basename=char_base, debug=debug, @@ -609,13 +617,11 @@ def make_character_sheet( char_pdf = create_character_pdf_template( character=character, basename=char_base, flatten=flatten ) - pages.append(char_pdf) person_pdf = create_personality_pdf_template( character=character, basename=person_base, flatten=flatten, ) - pages.append(person_pdf) if character.is_spellcaster and not (use_tex_template): # Create spell sheet spell_base = "{:s}_spells".format(basename) @@ -703,6 +709,7 @@ def _build(filename, args) -> int: fancy_decorations=args.fancy_decorations, use_tex_template=args.use_tex_template, spell_order=args.spell_order, + feat_order=args.feat_order, ) except exceptions.CharacterFileFormatError: # Only raise the failed exception if this file is explicitly given @@ -748,6 +755,14 @@ def main(args=None): help="Order spells by level in the feature pages.", dest="spell_order", ) + parser.add_argument( + "--feats-by-type", + "-N", + default=False, + action="store_true", + help="Order feats by type in the feature pages.", + dest="feat_order", + ) parser.add_argument( "--fancy-decorations", "--fancy", diff --git a/dungeonsheets/modules/DND-5e-LaTeX-Character-Sheet-Template b/dungeonsheets/modules/DND-5e-LaTeX-Character-Sheet-Template new file mode 160000 index 00000000..ab3b0417 --- /dev/null +++ b/dungeonsheets/modules/DND-5e-LaTeX-Character-Sheet-Template @@ -0,0 +1 @@ +Subproject commit ab3b041769dfbd42c0fb50cc42f50363cdab07c6 diff --git a/dungeonsheets/monsters/monsters_a.py b/dungeonsheets/monsters/monsters_a.py index 01a3312d..e8305a7d 100644 --- a/dungeonsheets/monsters/monsters_a.py +++ b/dungeonsheets/monsters/monsters_a.py @@ -750,26 +750,24 @@ class AdultRedDragon(Monster): on a failed save, or half as much damage on a successful one. Lair Actions. On initiative count 20 (losing initiative ties), the dragon takes a - lair action to cause one of the following effects: the dragon can't + lair action to cause one of the following effects. The dragon can't use the same effect two rounds in a row: - + - Magma erupts from a point on the ground the dragon can see within - 120 feet of it, creating a 20-foot-high, 5-foot-radius geyser. Each - creature in the geyser's area must make a DC 15 Dexterity saving - throw, taking 21 (6d6) fire damage on a failed save, or half as much - damage on a successful one. - + 120 feet of it, creating a 20-foot-high, 5-foot-radius geyser. Each + creature in the geyser's area must make a DC 15 Dexterity saving + throw, taking 21 (6d6) fire damage on a failed save, or half as much + damage on a successful one. - A tremor shakes the lair in a 60-foot-radius around the dragon. Each - creature other than the dragon on the ground in that area must succeed - on a DC 15 Dexterity saving throw or be knocked prone. - + creature other than the dragon on the ground in that area must succeed + on a DC 15 Dexterity saving throw or be knocked prone. - Volcanic gases form a cloud in a 20-foot-radius sphere centered on a - point the dragon can see within 120 feet of it. The sphere spreads - around corners, and its area is lightly obscured. It lasts until - initiative count 20 on the next round. Each creature that starts its - turn in the cloud must succeed on a DC 13 Constitution saving throw or - be poisoned until the end of its turn. While poisoned in this way, a - creature is incapacitated. + point the dragon can see within 120 feet of it. The sphere spreads + around corners, and its area is lightly obscured. It lasts until + initiative count 20 on the next round. Each creature that starts its + turn in the cloud must succeed on a DC 13 Constitution saving throw or + be poisoned until the end of its turn. While poisoned in this way, a + creature is incapacitated. # Legendary Actions diff --git a/dungeonsheets/monsters/monsters_p.py b/dungeonsheets/monsters/monsters_p.py index 58c44c8d..17f74c92 100644 --- a/dungeonsheets/monsters/monsters_p.py +++ b/dungeonsheets/monsters/monsters_p.py @@ -199,10 +199,10 @@ class PitFiend(Monster): The pit fiend's spellcasting ability is Charisma (spell save DC 21). The pit fiend can innately cast the following spells, requiring no material components: - - At will: detect magic, fireball - - 3/day each: hold monster, wall of fire + + - At will: detect magic, fireball + + - 3/day each: hold monster, wall of fire # Actions @@ -225,7 +225,8 @@ class PitFiend(Monster): + 8) bludgeoning damage plus 21 (6d6) fire damage. Tail. Melee Weapon Attack: +14 to hit, reach 10ft., one target. Hit: 24 - (3d1O + 8) bludgeoning damage. + (3d10 + 8) bludgeoning damage. + """ name = 'Pit Fiend' description = 'Large fiend, lawful evil' diff --git a/dungeonsheets/race.py b/dungeonsheets/race.py index d586ee17..c00e2947 100644 --- a/dungeonsheets/race.py +++ b/dungeonsheets/race.py @@ -403,6 +403,7 @@ class Triton(Race): features = ( feats.Amphibious, feats.ControlAirAndWater, + feats.Darkvision, feats.EmissaryOfTheSea, feats.GuardiansOfTheDepths, ) diff --git a/dungeonsheets/spells/spells_a.py b/dungeonsheets/spells/spells_a.py index 4bd4caa8..ccc8d71c 100644 --- a/dungeonsheets/spells/spells_a.py +++ b/dungeonsheets/spells/spells_a.py @@ -63,7 +63,7 @@ class AcidArrow(Spell): splashes the target with acid for half as much of the initial damage and no damage at the end of its next turn. - At Higher Levels. When you cast this spell using a spell slot of + **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage (both initial and later) increases by 1d4 for each slot level above 2nd. @@ -135,6 +135,7 @@ class Aid(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, a target's hit points increase by an additional 5 for each slot level above 2nd. + """ name = "Aid" @@ -183,24 +184,27 @@ class AlterSelf(Spell): While the spell lasts, you can end one option as an action to gain the benefits of a different one. - Aquatic Adaptation. You adapt your body to an aquatic - environment, sprouting gills, and growing webbing between your fingers. You can - breathe underwater and gain a swimming speed equal to your walking speed. - Change - Appearance. You transform your appearance. You decide what you look like, - including your height, weight, facial features, sound of your voice, hair - length, coloration, and distinguishing characteristics, if any. You can make - yourself appear as a member of another race, though none of your statistics - change. You also don't appear as a creature of a different size than you, and - your basic shape stays the same; if you're bipedal, you can't use this spell to - become quadrupedal, for instance. At any time for the duration of the spell, you - can use your action to change your appearance in this way again. - Natural - Weapons. You grow claws, fangs, spines, horns, or a different natural weapon of - your choice. Your unarmed strikes deal 1d6 bludgeoning, piercing, or slashing - damage, as appropriate to the natural weapon you chose, and you are proficient - with your unarmed strikes. Finally, the natural weapon is magic and you have a - +1 bonus to the attack and damage rolls you make using it. + Aquatic Adaptation. + You adapt your body to an aquatic + environment, sprouting gills, and growing webbing between your fingers. You can + breathe underwater and gain a swimming speed equal to your walking speed. + Change + Appearance. + You transform your appearance. You decide what you look like, + including your height, weight, facial features, sound of your voice, hair + length, coloration, and distinguishing characteristics, if any. You can make + yourself appear as a member of another race, though none of your statistics + change. You also don't appear as a creature of a different size than you, and + your basic shape stays the same; if you're bipedal, you can't use this spell to + become quadrupedal, for instance. At any time for the duration of the spell, you + can use your action to change your appearance in this way again. + Natural Weapons. + You grow claws, fangs, spines, horns, or a different natural weapon of + your choice. Your unarmed strikes deal 1d6 bludgeoning, piercing, or slashing + damage, as appropriate to the natural weapon you chose, and you are proficient + with your unarmed strikes. Finally, the natural weapon is magic and you have a + +1 bonus to the attack and damage rolls you make using it. + """ name = "Alter Self" @@ -223,9 +227,10 @@ class AnimalFriendship(Spell): on a Wisdom saving throw or be charmed by you for the spell's duration. If you or one of your companions harms the target, the spell ends. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, you can affect one additional beast for each slot level above 1st. + """ name = "Animal Friendship" @@ -261,6 +266,7 @@ class AnimalMessenger(Spell): **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. + """ name = "Animal Messenger" @@ -282,7 +288,6 @@ class AnimalShapes(Spell): large or smaller beast with a challenge rating of 4 or lower. On subsequent turns, you can use your actions 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, @@ -291,13 +296,14 @@ class AnimalShapes(Spell): to its normal form, it returns to the number of hit point 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 creature's normal form to 0 hit points, it isn't knocked unconcious. + reduce the creature's normal form to 0 hit points, it isn't knocked unconscious. The creature is limited in the actions it can perform 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. + """ name = "Animal Shapes" @@ -341,6 +347,7 @@ class AnimateDead(Spell): spell using a spell slot of 4th level or higher, you animate or reassert control over two additional undead creatures for each slot level above 3rd. Each of the creatures must come from a different corpse or pile of bones. + """ name = "Animate Dead" @@ -375,18 +382,18 @@ class AnimateObjects(Spell): given an order, the creature continues to follow it until its task is complete. - **Animated Object Statistics:** - - Tiny -- HP: 20, AC: 18, Attack: +8 to hit, 1d4 + 4 damage, Str: - 4, Dex: 18 - - Small -- HP: 25, AC: 16, Attack: +6 to hit, 1d8 + 2 damage, Str: - 6, Dex: 14 - - Medium – HP: 40, AC: 13, Attack: +5 to hit, 2d6 + 1 damage, Str: - 10, Dex: 12 - - Large – HP: 50, AC: 10, Attack: +6 to hit, 2d10 + 2 damage, Str: - 14, Dex: 10 - - Huge – HP: 80, AC: 10, Attack: +8 to hit, 2d12 + 4 damage, Str: - 18, Dex: 6 + ======== ==== ==== ==== ===== ============================== + Animated Object Statistics + ----------------------------------------------------------------- + Size HP AC Str Dex Attack + ======== ==== ==== ==== ===== ============================== + Tiny 20 18 4 18 +8 to hit, 1d4 + 4 damage + Small 25 16 6 14 +6 to hit, 1d8 + 2 damage + Medium 40 13 10 12 +5 to hit, 2d6 + 1 damage + Large 50 10 14 10 +6 to hit, 2d10 + 2 damage + Huge 80 10 18 6 +8 to hit, 2d12 + 4 damage + ======== ==== ==== ==== ===== ============================== An animated object is a construct with AC, hit points, attacks, Strength, and Dexterity determine by its size. Its Constitution is @@ -406,7 +413,7 @@ class AnimateObjects(Spell): its size. The DM might rule that a specific object inflicts slashing or piercing damage based on its form. - **At Higher:** If you cast this spell using a spell slot of 6th + **At Higher Levels:** If you cast this spell using a spell slot of 6th level or higher, you can animate two additional objects for each slot level above 5th. @@ -434,6 +441,7 @@ class AntilifeShell(Spell): If you move so that an affect creature is forced to pass through the barrier, the spell ends. + """ name = "Antilife Shell" @@ -450,10 +458,10 @@ class AntilifeShell(Spell): class AntimagicField(Spell): """A 10-foot-radius invisible sphere of antimagic surrounds you. This - area is divorced from the magical energy that suffeses the + area is divorced from the magical energy that suffuses the multiverse. Within the sphere, spells can't be cast, summoned creatures disappear, and even magic items become mundane. Until - the spell ends, the spere moves with you, centered on you. + the spell ends, the sphere moves with you, centered on you. Spells and other magical effects, except those created by an artifact or a deity, are suppressed in the sphere and can't @@ -462,7 +470,7 @@ class AntimagicField(Spell): the time it spends suppressed counts against its duration. Targeted Effects. - Spells and other magical effects, such as magic missle and charm + Spells and other magical effects, such as magic missile and charm person, that target a creature or an object in the sphere have no effect on that target. Areas of Magic. @@ -478,13 +486,13 @@ class AntimagicField(Spell): is in it. Magic Items. The properties and powers of magic items are suppressed in the - sphere. Forexample, a +1 longsword in the sphere functions as a + sphere. For example, a +1 longsword in the sphere functions as a nonmagical longsword. A magic weapon's properties and powers are suppressed if it is used against a target in the sphere or wielded by an attacker in the sphere. If a magic weapon or piece of magic ammunition fully leaves the sphere (For example, if you fire a magic arrow or throw a magic spear at a target outside - the sphere), the magic of the item ceases to be supressed as + the sphere), the magic of the item ceases to be suppressed as soon as it exits. Magical Travel. Teleportation and planar travel fail to work in the sphere, @@ -497,7 +505,7 @@ class AntimagicField(Spell): A creature or object summoned or created by magic temporarily winks out of existence in the sphere. Such a creature instantly reappears once the space the creature occupied is no longer - withinthe sphere. + within the sphere. Dispel Magic. Spells and magical effects such as dispel magic have no effect on the sphere. Likewise, the spheres created by different @@ -527,41 +535,42 @@ class Antipathysympathy(Spell): antipathy or sympathy as the aura's effect. Antipathy. - The enchantment causes - creatures of the kind you designated to feel an intense urge to leave the area - and avoid the target. When such a creature can see the target or comes within 60 - feet of it, the creature must succeed on a Wisdom saving throw or - become frightened. The creature remains frightened while it can see the target - or is within 60 feet of it. While frightened by the target, the creature must - use its movement to move to the nearest safe spot from which it can't see the - target. If the creature moves more than 60 feet from the target and can't see - it, the creature is no longer frightened, but the creature becomes frightened - again if it regains sight of the target or moves within 60 feet of it. - - + The enchantment causes + creatures of the kind you designated to feel an intense urge to leave the area + and avoid the target. When such a creature can see the target or comes within 60 + feet of it, the creature must succeed on a Wisdom saving throw or + become frightened. The creature remains frightened while it can see the target + or is within 60 feet of it. While frightened by the target, the creature must + use its movement to move to the nearest safe spot from which it can't see the + target. If the creature moves more than 60 feet from the target and can't see + it, the creature is no longer frightened, but the creature becomes frightened + again if it regains sight of the target or moves within 60 feet of it. Sympathy. - The enchantment causes the specified creatures to feel an intense - urge to approach the target while within 60 feet of it or able to see it. When - such a creature can see the target or comes within 60 feet o fit, the creature - must succeed on a Wisdom saving throw or use its movement on each of its turns - to enter the area or move within reach of the target. When the creature has done - so, it can't willingly move away from the target. If the target damages or + The enchantment causes the specified creatures to feel an intense + urge to approach the target while within 60 feet of it or able to see it. When + such a creature can see the target or comes within 60 feet of it, the creature + must succeed on a Wisdom saving throw or use its movement on each of its turns + to enter the area or move within reach of the target. When the creature has done + so, it can't willingly move away from the target. + + If the target damages or otherwise harms an affected creature, the affected creature can make a Wisdom saving throw to end the effect, as described below. Ending the Effect. + If an affected creature ends its turn while not within 60 feet of the target + or able to see it, the creature makes a Wisdom saving throw. On a successful + save, the creature is no longer affected by the target and recognizes the + feeling of repugnance or attraction as magical. In addition, a creature affected + by the spell is allowed another Wisdom saving throw every 24 hours while the + spell persists. - If an affected creature ends its turn while not within 60 feet of the target - or able to see it, the creature makes a Wisdom saving throw. On a successful - save, the creature is no longer affected by the target and recognizes the - feeling of repugnance or attraction as magical. In addition, a creature affected - by the spell is allowed another Wisdom saving throw every 24 hours while the - spell persists. A creature that successfully saves against this effect is immune to it for 1 minute, after which time it can be affected again. + """ - name = "Antipathysympathy" + name = "Antipathy/sympathy" level = 8 casting_time = "1 hour" casting_range = "60 feet" @@ -577,15 +586,17 @@ class Antipathysympathy(Spell): class ArcaneEye(Spell): - """You create an invisible, magical eye within e that hovers in the air for the + """You create an invisible, magical eye within range that hovers in the air for the duration. You mentally receive visual information from the eye, which has normal vision and darkvision out to 30 feet. The eye can look in every direction. + As an action, you can move the eye up to 30 feet in any direction. There is no limit to how far away from you the eye can move, but it can't enter another plane of existence. A solid barrier blocks the eye's movement, but the eye can pass through an opening as small as 1 inch in diameter. + """ name = "Arcane Eye" @@ -619,6 +630,7 @@ class ArcaneGate(Spell): 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. + """ name = "Arcane Gate" @@ -645,6 +657,7 @@ class ArcaneLock(Spell): 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. + """ name = "Arcane Lock" @@ -668,7 +681,7 @@ class ArmorOfAgathys(Spell): **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 + damage increase by 5 for each slot. """ @@ -692,9 +705,10 @@ class ArmsOfHadar(Spell): necrotic damage and can't take reactions until its next turn. On a successful save, the creature takes half damage, but suffers no other effect. - At Higher - Levels: When you cast this spell using a spell slot of 2nd level or higher, the + **At Higher + Levels:** When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. + """ name = "Arms Of Hadar" @@ -716,14 +730,13 @@ class AstralProjection(Spell): The material body you leave behind is unconscious and in a state of suspended animation; it doesn't need food or air and doesn't age. - Your astral body resembles your mortal form in almost every way, replicating your game statistics and possessions. The principal difference is the addition of a silvery cord that extends from between your shoulder blades and trails behind you, fading to invisibility after 1 foot. This cord is your tether to your material body. As long as the tether remains intact, you can find your - way home. If the cord is cut something that can happen only when an effect - specifically states that it does your soul and body are separated, killing you + way home. If the cord is cut, something that can happen only when an effect + specifically states that it does, your soul and body are separated, killing you instantly. Your astral form can freely travel through the Astral Plane and can @@ -736,7 +749,6 @@ class AstralProjection(Spell): for you and your companions when you use your action to dismiss it. When the spell ends, the affected creature returns to its physical body, and it awakens. - The spell might also end early for you or one of your companions. A successful dispel magic spell used against an astral or physical body ends the spell for that creature. If a creature's original body or its astral form drops to 0 hit @@ -745,6 +757,7 @@ class AstralProjection(Spell): its state of suspended animation. 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. + """ name = "Astral Projection" @@ -801,10 +814,11 @@ class Augury(Spell): class AuraOfLife(Spell): """Life-preserving energy radiates from you in an aura with a 30-foot radius. - Until the spll ends, the aura moves with you, centered on you. Each nonhostile + Until the spell ends, the aura moves with you, centered on you. Each nonhostile creature in the aura (including you) has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a nonhostile, living creature - regains 1 hit point when it starts its turn in the arua with 0 hit points. + regains 1 hit point when it starts its turn in the aura with 0 hit points. + """ name = "Aura Of Life" @@ -825,8 +839,9 @@ class AuraOfPurity(Spell): spell ends, the aura moves with you, centered on you. Each nonhostile creature in the aura (including you) can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the - following conditions: blnded, charmed, deafended, frightened, paralyzed, + following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. + """ name = "Aura Of Purity" @@ -867,7 +882,7 @@ class Awaken(Spell): either no Intelligence score or an Intelligence of 3 or less. The target gains an Intelligence of 10. The target also gains the ability to speak one language you know. If the target is a plant, it gains the ability to move its limbs, - roots, vinces, creepers, and so forth, and it gains senses similar to a huamn's. + roots, vines, creepers, and so forth, and it gains senses similar to a human's. Your DM chooses statistics appropriate for the awakened plant, such as the statistics for the awakened shrub or the awakened tree. @@ -876,6 +891,7 @@ class Awaken(Spell): harmful to it. When the charmed condition ends, the awakened creature chooses whether to remain friendly to you, based on how you treated it while it was charmed. + """ name = "Awaken" diff --git a/dungeonsheets/spells/spells_b.py b/dungeonsheets/spells/spells_b.py index 56e8cf94..7208f0c9 100644 --- a/dungeonsheets/spells/spells_b.py +++ b/dungeonsheets/spells/spells_b.py @@ -7,9 +7,10 @@ class Bane(Spell): attack roll or a saving throw before the spell ends, the target must roll a d4 and subtract the number rolled from the attack roll or saving throw. - At Higher - Levels: When you cast this spell using a spelslot of 2nd level or higher, you - can target one aditional creature for each slot level above 1st. + **At Higher + Levels:** When you cast this spell using a spell slot of 2nd level or higher, you + can target one additional creature for each slot level above 1st. + """ name = "Bane" @@ -28,12 +29,13 @@ class BanishingSmite(Spell): """The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points - of fewer, you banish it. If the target is native to a different plane of + or fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demiplane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. + """ name = "Banishing Smite" @@ -52,7 +54,6 @@ class Banishment(Spell): """You attempt to send one creature that you can see within range to another place of existence. The target must succeed on a Charisma saving throw or be banished. - If the target is native to the plane of existence you're on, you banish the target to a harmless demiplane. While there, the target is incapacitated. The target remains there until the spell ends, at which point the target reappears @@ -69,6 +70,7 @@ class Banishment(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. + """ name = "Banishment" @@ -84,9 +86,10 @@ class Banishment(Spell): class Barkskin(Spell): - """You touch a willing creature. Until the spellends, the target's skin has a + """You touch a willing creature. Until the spell ends, the target's skin has a rough, bark-like appearance, and the target's AC can't be less than 16, regardless of what kind of armor it is wearing. + """ name = "Barkskin" @@ -106,6 +109,7 @@ class BeaconOfHope(Spell): range. For the duration, each target has advantage on Wisdom saving throws and death saving throws, and regains the maximum number of hit points possible from any healing. + """ name = "Beacon Of Hope" @@ -168,13 +172,18 @@ class BeastSense(Spell): class BestowCurse(Spell): """You touch a creature, and that creature must succeed on a Wisdom saving throw or become cursed for the duration of the spell. When you cast this spell, choose - the nature of the curse from the following options:* Choose one ability score. - While cursed, the target has disadvantage on ability checks and saving throws - made with that ability score.* While cursed, the target has disadvantage on - attack rolls against you.* While cursed, the target must make a Wisdom saving - throw at the start of each of its turns. If it fails, it wastes its action that - turn doing nothing.* While the target is cursed, your attacks and spells deal an - extra 1d8 necrotic damage to the target. + the nature of the curse from the following options: + + - Choose one ability score. + While cursed, the target has disadvantage on ability checks and saving throws + made with that ability score. + - While cursed, the target has disadvantage on + attack rolls against you. + - While cursed, the target must make a Wisdom saving + throw at the start of each of its turns. If it fails, it wastes its action that + turn doing nothing. + - While the target is cursed, your attacks and spells deal an + extra 1d8 necrotic damage to the target. A remove curse spell ends this effect. At the DM's option, you may choose an alternative curse effect, but it @@ -222,39 +231,39 @@ class BigbysHand(Spell): turns, you can move the hand up to 60 feet and then cause one of the following effects with it. - **Clenched Fist** - The hand strikes one creature or object within 5 feet of it. Make - a melee spell attack for the hand using your game statistics. On a - hit, the target takes 4d8 force damage. - - **Forceful Hand** - The hand attempts to push a creature within 5 feet of it in a - direction you choose. Make a check with the hand's Strength - contested by the Strength (Athletics) check of the target. If the - target is Medium or smaller, you have advantage on the check. If - you succeed, the hand pushes the target up to 5 feet plus a number - of feet equal to five times your spellcasting ability - modifier. The hand moves with the target to remain within 5 feet - of it. - - **Grasping Hand** - The hand attempts to grapple a Huge or smaller creature within 5 - feet of it. You use the hand's Strength score to resolve the - grapple. If the target is Medium or smaller, you have advantage on - the check. While the hand is grappling the target, you can use a - bonus action to have the hand crush it. When you do so, the target - takes bludgeoning damage equal to 2d6 + your spellcasting ability - modifier. - - **Interposing Hand** - The hand interposes itself between you and a creature you choose - until you give the hand a different command. The hand moves to - stay between you and the target, providing you with half cover - against the target. The target can't move through the hand's space - if its Strength score is less than or equal to the hand's Strength - score. If its Strength score is higher than the hand's Strength - score, the target can move toward you through the hand's space, - but that space is difficult terrain for the target. + Clenched Fist + The hand strikes one creature or object within 5 feet of it. Make + a melee spell attack for the hand using your game statistics. On a + hit, the target takes 4d8 force damage. + + Forceful Hand. + The hand attempts to push a creature within 5 feet of it in a + direction you choose. Make a check with the hand's Strength + contested by the Strength (Athletics) check of the target. If the + target is Medium or smaller, you have advantage on the check. If + you succeed, the hand pushes the target up to 5 feet plus a number + of feet equal to five times your spellcasting ability + modifier. The hand moves with the target to remain within 5 feet + of it. + + Grasping Hand. + The hand attempts to grapple a Huge or smaller creature within 5 + feet of it. You use the hand's Strength score to resolve the + grapple. If the target is Medium or smaller, you have advantage on + the check. While the hand is grappling the target, you can use a + bonus action to have the hand crush it. When you do so, the target + takes bludgeoning damage equal to 2d6 + your spellcasting ability + modifier. + + Interposing Hand. + The hand interposes itself between you and a creature you choose + until you give the hand a different command. The hand moves to + stay between you and the target, providing you with half cover + against the target. The target can't move through the hand's space + if its Strength score is less than or equal to the hand's Strength + score. If its Strength score is higher than the hand's Strength + score, the target can move toward you through the hand's space, + but that space is difficult terrain for the target. **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the damage from the clenched fist option @@ -283,10 +292,11 @@ class BladeBarrier(Spell): provides three-quarters cover to creatures behind it, and its space is difficult terrain. -  When a creature enters the wall's area for the first time on a turn +  When a creature enters the wall's area for the first time on a turn or starts its turn there, the creature must make a Dexterity saving throw. On a - failed save, the creature takes 6 d10 slashing damage. On a successful save, + failed save, the creature takes 6d10 slashing damage. On a successful save, the creature takes half as much damage. + """ name = "Blade Barrier" @@ -305,6 +315,7 @@ class BladeWard(Spell): """You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks. + """ name = "Blade Ward" @@ -324,9 +335,10 @@ class Bless(Spell): makes an attack roll or a saving throw before the spell ends, the target can roll a d4 and add the number rolled to the attack roll or saving throw. - At - Higher Levels: When you cast this spell using a spell slot of 2nd level or + **At + Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. + """ name = "Bless" @@ -355,9 +367,10 @@ class Blight(Spell): If you target a nonmagical plant that isn't a creature, such as a tree or shrub, it doesn't make a saving throw; it simply withers and dies. - At Higher - Levels: When you cast this spell using a spell slot of 5th level or higher, the + **At Higher + Levels:** When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d8 for each slot level above 4th. + """ name = "Blight" @@ -424,21 +437,22 @@ class BlindnessDeafness(Spell): class Blink(Spell): """Roll a d20 at the end of each of your turns for the duration of the spell. On a roll of 11 or higher, you vanish from your current plane of existence and appear - in the Etheral Plane (the spell fails and the casting is wasted if you were + in the Ethereal Plane (the spell fails and the casting is wasted if you were already on that plane). At the start of you next turn, and when the spell ends - if you are on the Etheral Plane, you return to an unoccupied space of your + if you are on the Ethereal Plane, you return to an unoccupied space of your choice that you can see within 10 feet of the space you vanished from. If no - unoccupied space is available within that rang, you appear in the nearest + unoccupied space is available within that range, you appear in the nearest unoccupied space (chosen at random if more that one space is equally near). You can dismiss this spell as an action. While on the Ethereal Plane, you can see and hear the plane you originated from, which is cast in shades of gray, and you - can't see anything more than 60 feet away.You can only affect and be affected - by other reatures on the Ethereal Plane. Creature that aren't there can't + can't see anything more than 60 feet away. You can only affect and be affected + by other creatures on the Ethereal Plane. Creature that aren't there can't perceive you or interact with you, unless they have the ability to do so. + """ name = "Blink" @@ -456,8 +470,9 @@ class Blink(Spell): class Blur(Spell): """Your body becomes blurred, shifting and wavering to all who can see you. For the duration, any creature has disadvantage on attack rolls against you. An - attacker is immune to this effect if it doesnt rely on sight, as with + attacker is immune to this effect if it doesn't rely on sight, as with blindsight, or can see through illusions, as with truesight. + """ name = "Blur" @@ -519,14 +534,15 @@ class BoomingBlade(Spell): fails. On a hit, the target suffers the attack's normal effects, and it becomes sheathed in booming energy until the start of your next turn. If the target - willingly moves be- fore then, it immediately takes 1d8 thunder damage, and the + willingly moves before then, it immediately takes 1d8 thunder damage, and the spell ends. This spell's damage increases when you reach higher levels. - At - Higher Levels: At 5th level, the melee attack deals an extra 1d8 thunder damage + **At + Higher Levels:** At 5th level, the melee attack deals an extra 1d8 thunder damage to the target, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th level and 17th level. + """ name = "Booming Blade" @@ -543,7 +559,7 @@ class BoomingBlade(Spell): class BrandingSmite(Spell): """The next time you hit a creature with a weapon attack before this spell ends, - the weapon glemas with astral radiance as you strike. The attack deals an extra + the weapon gleams with astral radiance as you strike. The attack deals an extra 2d6 radiant damage to the target, which becomes visible if it is invisible, and the target sheds dim light in a 5-foot radius and can't become invisible until the spell ends. @@ -551,6 +567,7 @@ class BrandingSmite(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the extra damage increases by 1d6 for each slot level above 2nd. + """ name = "Branding Smite" @@ -574,9 +591,10 @@ class BurningHands(Spell): The fire ignites any flammable objects in the area that aren't being worn or carried. - At - Higher Levels: When you cast this spell using a spell slot of 2nd level or + **At + Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. + """ name = "Burning Hands" diff --git a/dungeonsheets/spells/spells_c.py b/dungeonsheets/spells/spells_c.py index af101c94..6156e1f3 100644 --- a/dungeonsheets/spells/spells_c.py +++ b/dungeonsheets/spells/spells_c.py @@ -137,6 +137,7 @@ class CauseFear(Spell): spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. The creatures must be within 30 feet of each other when you target them. + """ name = "Cause Fear" @@ -183,6 +184,7 @@ class Ceremony(Spell): For the next 7 days, each target gains a +2 bonus to AC while they are within 30 feet of each other. A creature can benefit from this rite again only if widowed. + """ name = "Ceremony" @@ -190,7 +192,7 @@ class Ceremony(Spell): casting_time = "1 hour" casting_range = "Touch" components = ("V", "S", "M") - materials = "25 gp worth of powdered silver,which the spell consumes" + materials = "25 gp worth of powdered silver, which the spell consumes" duration = "Instantaneous" ritual = True magic_school = "Abjuration" @@ -207,10 +209,11 @@ class ChainLightning(Spell): A target must make a Dexterity saving throw. The target takes 10d8 lightning damage on a failed save, or half as much on a successful one. - At - Higher Levels: When you cast this spell using a spell slot of 7th level or + **At + Higher Levels:** When you cast this spell using a spell slot of 7th level or higher, one additional bolt leaps from the first target to another target for each slot level above 6th. + """ name = "Chain Lightning" @@ -230,22 +233,22 @@ class ChainLightning(Spell): class ChaosBolt(Spell): """You hurl an undulating, warbling mass of chaotic energy at one creature in range. Make a ranged spell attack against the - target. On a hit, the target takes ``2d8+1d6`` damage. Choose one + target. On a hit, the target takes 2d8 \+ 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attacks damage type, as shown below. - == =========== - d8 Damage Type - == =========== - 1 Acid - 2 Cold - 3 Fire - 4 Force - 5 Lightning - 6 Poison - 7 Psychic - 8 Thunder - == =========== + ==== ============= + d8 Damage Type + ==== ============= + 1 Acid + 2 Cold + 3 Fire + 4 Force + 5 Lightning + 6 Poison + 7 Psychic + 8 Thunder + ==== ============= If you roll the same number on both d8s, the chaotic energy leaps from the target to a different creature of your choice within 30 @@ -305,7 +308,7 @@ class CharmPerson(Spell): make a Wisdom saving throw, and does so with advantage if you or your companions are fighting it. If it fails the saving throw, it is charmed by you until the spell ends or until you or your - companions do anything harmful to it.The charmed creature regards + companions do anything harmful to it. The charmed creature regards you as a friendly acquaintance. When the spell ends, the creature knows it was charmed by you. @@ -340,6 +343,7 @@ class ChillTouch(Spell): **At Higher Levels:** This spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8). + """ name = "Chill Touch" @@ -360,8 +364,8 @@ class ChromaticOrb(Spell): type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. - At - Higher Levels: When you cast this spell using a spell slot of 2nd level or + **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. """ @@ -383,9 +387,10 @@ class CircleOfDeath(Spell): A target takes 8d6 necrotic damage on a failed save, or half as much damage on a successful one. - **At Higher Levels:** W hen you cast this spell using a spell slot + **At Higher Levels:** When you cast this spell using a spell slot of 7th level or higher, the damage increases by 2d6 for each slot level above 6th. + """ name = "Circle Of Death" @@ -407,10 +412,10 @@ class CircleOfPower(Spell): you. For the duration, each friendly creature in the area (including you) has advantage on saving throws against spells and other magical effects. - Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. + """ name = "Circle Of Power" @@ -435,8 +440,9 @@ class Clairvoyance(Spell): When you cast the spell, you choose seeing or hearing. You can use the chosen sense through the sensor as if you were in its space. As your action, you can switch between seeing and hearing. A creature - that can see the sensor (such as a creature benefitting from see invisibility or + that can see the sensor (such as a creature benefiting from see invisibility or truesight) sees a luminous, intangible orb about the size of your fist. + """ name = "Clairvoyance" @@ -462,14 +468,14 @@ class Clone(Spell): version of the same creature. It remains inert and endures indefinitely, as long as its vessel remains undisturbed. - -  At any time after the clone matures, if + At any time after the clone matures, if the original creature dies, its soul transfers to the clone, provided that the soul is free and willing to return. The clone is physically identical to the original and has the same personality, memories, and abilities, but none of the original's equipment. The original creature's physical remains, if they still - exist, becom e inert and can't thereafter be restored to life, since the + exist, become inert and can't thereafter be restored to life, since the creature's soul is elsewhere. + """ name = "Clone" @@ -494,9 +500,9 @@ class CloudOfDaggers(Spell): on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. - **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. + """ name = "Cloud Of Daggers" @@ -514,12 +520,12 @@ class CloudOfDaggers(Spell): class Cloudkill(Spell): """You create a 20-foot-radius sphere of poisonous, yellow-green fog centered on a point you choose within range. The fog spreads around corners. It lasts for the - duration or until strong wind dispereses the fog, ending the spell. Its area is + duration or until strong wind disperses the fog, ending the spell. Its area is heavily obscured. When a creature enters the spell's area for the first time on a turn or starts its turn there, that creature must make a Constitution - saving throw. The creature takes 5d8 poison damageon a failed save, or half as + saving throw. The creature takes 5d8 poison damage on a failed save, or half as much damage on a successful one. Creatures are affected even if they hold their breath or don't need to breathe. @@ -531,6 +537,7 @@ class Cloudkill(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th. + """ name = "Cloudkill" @@ -562,6 +569,7 @@ class ColorSpray(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, roll an additional 2d10 for each slot level above 1st. + """ name = "Color Spray" @@ -638,6 +646,7 @@ class Commune(Spell): the spell two or more times before finishing your next long rest, there is a cumulative 25 percent chance for each casting after the first that you get no answer. The DM makes this roll in secret. + """ name = "Commune" @@ -701,6 +710,7 @@ class CompelledDuel(Spell): other creature, if you cast a spell that targets a hostile creature other than the target, if a creature friendly to you damages the target or casts a harmful spell on it, or if you end your turn more than 30 feet away from the target. + """ name = "Compelled Duel" @@ -725,6 +735,7 @@ class ComprehendLanguages(Spell): This spell doesn't decode secret messages in a text or glyph, such as an arcane sigil, that isn't part of a written language. + """ name = "Comprehend Languages" @@ -753,6 +764,7 @@ class Compulsion(Spell): A target isn't compelled to move into an obviously deadly hazard, such as a fire pit, but it will provoke opportunity attacks to move in the designated direction. + """ name = "Compulsion" @@ -779,6 +791,7 @@ class ConeOfCold(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th. + """ name = "Cone Of Cold" @@ -804,28 +817,31 @@ class Confusion(Spell): start of each of its turns to determine its behavior for that turn. - d10 behavior: + ======== ================================================== + d10 Behavior + ======== ================================================== + 1 The creature uses all its movement to move in a + random direction. To determine the direction, roll + a d8 and assign a direction to each die face. The + creature doesn't take an action this turn. - **1.** The creature uses all its movement to move in a random - direction. To determine the direction, roll a d8 and assign a - direction to each die face. The creature doesn't take an action - this turn. + 2-6 The creature doesn't move or take actions this + turn. - **2-6.** The creature doesn't move or take actions this turn. - - **7-8.** The creature uses its action to make a melee attack - against a randomly determined creature within its reach. If there - is no creature within its reach, the creature does nothing this - turn. + 7-8 The creature uses its action to make a melee + attack against a randomly determined creature + within its reach. If there is no creature within + its reach, the creature does nothing this turn. - **9-10.** The creature can act and move normally. + 9-10 The creature can act and move normally. + ======== ================================================== At the end of its turns, an affected target can make a Wisdom saving throw. It it succeeds, this effect ends for that target. **At Higher Levels:** When you cast this spell using a spell slot of 5th level or higher, the radius of the sphere increases by 5 - feet for each slot level above 4th + feet for each slot level above 4th. """ @@ -855,7 +871,6 @@ class ConjureAnimals(Spell): Each beast is also considered fey, and it disappears when it drops to 0 hit points or when the spell ends. - The summoned creatures are friendly to you and your companions. Roll initiative for the summoned creatures as a group, which has its own turns. They obey any verbal commands that you @@ -893,6 +908,7 @@ class ConjureBarrage(Spell): creature takes 3d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the weapon or ammunition used as a component. + """ name = "Conjure Barrage" @@ -920,9 +936,9 @@ class ConjureCelestial(Spell): creatures but otherwise takes no actions The DM has the celestial's statistics. - **At Higher Levels:** When you cast this spell using a 9th-level spell slot, you summon a celestial of challenge rating 5 or lower. + """ name = "Conjure Celestial" @@ -954,13 +970,13 @@ class ConjureElemental(Spell): If your concentration is broken, the elemental doesn't disappear. Instead, you lose - control of the elemental, it becom es hostile toward you and your companions, + control of the elemental, it becomes hostile toward you and your companions, and it might attack. An uncontrolled elemental can't be dismissed by you, and it disappears 1 hour after you summoned it. The DM has the elemental's statistics. - **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the challenge rating increases by 1 for each slot level above 5th. + """ name = "Conjure Elemental" @@ -999,9 +1015,10 @@ class ConjureFey(Spell): after you summoned it. The DM has the fey creature's statistics. - At Higher - Levels: When you cast this spell using a spell slot of 7th level or higher, the - challenge rating increases by 1 for each slot level above 6th + **At Higher + Levels:** When you cast this spell using a spell slot of 7th level or higher, the + challenge rating increases by 1 for each slot level above 6th. + """ name = "Conjure Fey" @@ -1019,14 +1036,12 @@ class ConjureFey(Spell): class ConjureMinorElementals(Spell): """You summon elementals that appear in unoccupied spaces that you can see within range. -  You choose one the following options for what appears: - -One elemental - of challenge rating 2 or lower - -Two elementals of challenge rating 1 or lower + You choose one the following options for what appears: - -Four elementals of challenge rating 1/2 or lower - -Eight elementals of - challenge rating 1/4 or lower. + - One elemental of challenge rating 2 or lower + - Two elementals of challenge rating 1 or lower + - Four elementals of challenge rating 1/2 or lower + - Eight elementals of challenge rating 1/4 or lower. An elemental summoned by this spell disappears when it drops to 0 hit points or when the spell ends. @@ -1043,6 +1058,7 @@ class ConjureMinorElementals(Spell): you cast this spell using certain higher-level spell slots, you choose one of the summoning options above, and more creatures appear: twice as many with a 6th-level slot and three times as many with an 8th-level slot. + """ name = "Conjure Minor Elementals" @@ -1066,6 +1082,7 @@ class ConjureVolley(Spell): that point must make a Dexterity saving throw. A creature takes 8d8 damage on a failed save, or half as much damage on a successful one. The damage type is the same as that of the ammunition or weapon. + """ name = "Conjure Volley" @@ -1085,13 +1102,11 @@ class ConjureWoodlandBeings(Spell): within range. Choose one of the following options for what appears: -  - One - fey creature of challenge rating 2 or lower -  - Two fey creatures of challenge - rating 1 or lower -  - Four fey creatures of challenge rating 1/2 or lower -  - - Eight fey creatures of challenge rating 1/4 or lower + + - One fey creature of challenge rating 2 or lower + - Two fey creatures of challenge rating 1 or lower + - Four fey creatures of challenge rating 1/2 or lower + - Eight fey creatures of challenge rating 1/4 or lower A summoned creature disappears when it drops to 0 hit points or when the spell ends. @@ -1104,12 +1119,13 @@ class ConjureWoodlandBeings(Spell): otherwise take no actions. The DM has the creatures' statistics. - At Higher - Levels: When you cast this spell using certain higher-level spell slots, you + **At Higher + Levels:** When you cast this spell using certain higher-level spell slots, you choose one of the summoning options above, and more creatures appear: twice as many with a 6th-level slot three times as many with an 8th-level slot. + """ name = "Conjure Woodland Beings" @@ -1140,6 +1156,7 @@ class ContactOtherPlane(Spell): no, maybe, never, irrelevant, or unclear (if the entity doesn't know the answer to the question). If a one-word answer would be misleading, the DM might instead offer a short phrase as an answer. + """ name = "Contact Other Plane" @@ -1171,27 +1188,27 @@ class Contagion(Spell): effect that removes a disease or otherwise ameliorates a disease's effects apply to it. - Blinding Sickness + Blinding Sickness. Pain grips the creature's mind, and its eyes turn milky white. The creature has disadvantage on Wisdom checks and Wisdom saving throws and is blinded. - Filth Fever + Filth Fever. A raging fever sweeps through the creature's body. The creature has disadvantage on Strength checks, Strength saving throws, and attack rolls that use Strength. - Flesh Rot + Flesh Rot. The creature's flesh decays. The creature has disadvantage on Charisma checks and vulnerability to all damage. - Mindfire + Mindfire. The creature's mind becomes feverish. The creature has disadvantage on Intelligence checks and Intelligence saving throws, and the creature behaves as if under the effects of the confusion spell during combat. - Seizure + Seizure. The creature is overcome with shaking. The creature has disadvantage on Dexterity checks, Dexterity saving throws, and attack rolls that use Dexterity. - Slimy Doom + Slimy Doom. The creature begins to bleed uncontrollably. The creature has disadvantage on Constitution checks and Constitution saving throws. In addition, whenever the creature takes damage, it is @@ -1307,7 +1324,7 @@ class ControlWater(Spell): spell. As an action on your turn, you can repeat the same effect or choose a different one. - Flood + Flood. You cause the water level of all standing water in the area to rise by as much as 20 feet. If the area includes a shore, the flooding water spills over onto dry land. If you choose an area @@ -1322,14 +1339,14 @@ class ControlWater(Spell): or you choose a different effect. If this effect produced a wave, the wave repeats on the start of your next turn while the flood effect lasts. - Part Water + Part Water. You cause water in the area to move apart and create a trench. The trench extends across the spell's area, and the separated water forms a wall to either side. The trench remains until the spell ends or you choose a different effect. The water then slowly fills in the trench over the course of the next round until the normal water level is restored. - Redirect Flow + Redirect Flow. You cause flowing water in the area to move in a direction you choose, even if the water has to flow over obstacles, up walls, or in other unlikely directions. The water in the area moves as @@ -1337,7 +1354,7 @@ class ControlWater(Spell): resumes its flow based on the terrain conditions. The water continues to move in the direction you chose until the spell ends or you choose a different effect. - Whirlpool + Whirlpool. This effect requires a body of water at least 50 feet square and 25 feet deep. You cause a whirlpool to form in the center of the area. The whirlpool forms a vortex that is 5 feet wide at the @@ -1393,27 +1410,38 @@ class ControlWeather(Spell): on the following tables and change its stage by one, up or down. When changing the wind, you can change its direction. - **Precipitation** - Stage 1 – Clear, - Stage 2 – Light clouds, - Stage 3 – Overcast or ground fog, - Stage 4 – Rain, hail or snow, - Stage 5 – Torrential rain, driving hail or blizzard - - **Temperature** - Stage 1 – Unbearable heat, - Stage 2 – Hot, - Stage 3 – Warm, - Stage 4 – Cool, - Stage 5 – Cold, - Stage 6 – Arctic cold - - **Wind** - Stage 1 – Calm, - Stage 2 – Moderate wind, - Stage 3 – Strong wind, - Stage 4 – Gale, - Stage 5 – Storm + =========== =========================================== + Precipitation + ========================================================== + Stage 1 Clear + Stage 2 Light clouds + Stage 3 Overcast or ground fog + Stage 4 Rain, hail or snow + Stage 5 Torrential rain, driving hail or blizzard + =========== =========================================== + + + =========== =========================================== + Temperature + ========================================================== + Stage 1 Unbearable heat + Stage 2 Hot + Stage 3 Warm + Stage 4 Cool + Stage 5 Cold + Stage 6 Arctic cold + =========== =========================================== + + + =========== =========================================== + Wind + ========================================================== + Stage 1 Calm + Stage 2 Moderate wind + Stage 3 Strong wind + Stage 4 Gale + Stage 5 Storm + =========== =========================================== """ @@ -1437,27 +1465,30 @@ class ControlWinds(Spell): effect. You can also use your action to temporarily halt the effect or to restart one you've halted. - Gusts. A wind picks up within the cube, continually blowing in a - horizontal direction that you choose. You choose the intensity of - the wind: calm, moderate, or strong. If the wind is moderate or - strong, ranged weapon attacks that pass through it or that are - made against targets within the cube have disadvantage on their - attack rolls. If the wind is strong, any creature moving against - the wind must spend 1 extra foot of movement for each foot moved. - - Downdraft. You cause a sustained blast of strong wind to blow - downward from the top of the cube. Ranged weapon attacks that pass - through the cube or that are made against targets within it have - disadvantage on their attack rolls. A creature must make a - Strength saving throw if it flies into the cube for the first time - on a turn or starts its turn there flying. On a failed save, the - creature is knocked prone. - - Updraft. You cause a sustained updraft within the cube, rising - upward from the cube's bottom edge. Creatures that end a fall - within the cube take only half damage from the fall. When a - creature in the cube makes a vertical jump, the creature can jump - up to 10 feet higher than normal. + Gusts. + A wind picks up within the cube, continually blowing in a + horizontal direction that you choose. You choose the intensity of + the wind: calm, moderate, or strong. If the wind is moderate or + strong, ranged weapon attacks that pass through it or that are + made against targets within the cube have disadvantage on their + attack rolls. If the wind is strong, any creature moving against + the wind must spend 1 extra foot of movement for each foot moved. + + Downdraft. + You cause a sustained blast of strong wind to blow + downward from the top of the cube. Ranged weapon attacks that pass + through the cube or that are made against targets within it have + disadvantage on their attack rolls. A creature must make a + Strength saving throw if it flies into the cube for the first time + on a turn or starts its turn there flying. On a failed save, the + creature is knocked prone. + + Updraft. + You cause a sustained updraft within the cube, rising + upward from the cube's bottom edge. Creatures that end a fall + within the cube take only half damage from the fall. When a + creature in the cube makes a vertical jump, the creature can jump + up to 10 feet higher than normal. """ @@ -1486,10 +1517,10 @@ class CordonOfArrows(Spell): When you cast this spell, you can designate any creatures you choose, and the spell ignores them. - **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the amount of ammunition that can be affected increases by two for each slot level above 2nd. + """ name = "Cordon Of Arrows" @@ -1518,6 +1549,7 @@ class Counterspell(Spell): you cast this spell using a spell slot of 4th level or higher, the interrupted spell has no effect if its level is less than or equal to the level of the spell slot you used. + """ name = "Counterspell" @@ -1563,6 +1595,7 @@ class CreateFoodAndWater(Spell): containers within range, enough to sustain up to fifteen humanoids or five steeds for 24 hours. The food is bland but nourishing, and spoils if uneaten after 24 hours. The water is clean and doesn't go bad. + """ name = "Create Food And Water" @@ -1594,6 +1627,7 @@ class CreateHomunculus(Spell): removed by any means before then, except by the homunculus‘s death. You can have only one homunculus at a time. If you cast this spell while your homunculus lives, the spell fails. + """ name = "Create Homunculus" @@ -1614,13 +1648,13 @@ class CreateHomunculus(Spell): class CreateOrDestroyWater(Spell): """You either create or destroy water. - Create Water + Create Water. You create up to 10 gallons of clean water within range in an open container. Alternatively, the water falls as rain in a 30-foot cube within range, extinguishing exposed flames in the area. - Destroy Water + Destroy Water. You destroy up to 10 gallons of water in an open container within range. Alternatively, you destroy fog in a 30-foot cube within range. @@ -1704,20 +1738,22 @@ class Creation(Spell): duration depends on the object's material. If the object is composed of multiple materials, use the shortest duration. - Material - Duration - Vegetable matter - 1 day - Stone/crystal - 12 hours - Precious metals - 1 hour - Gems - 10 minutes - - Adamantine/Mithral - 1 minute + ====================== ============= + Material Duration + ====================== ============= + Vegetable matter 1 day + Stone/crystal 12 hours + Precious metals 1 hour + Gems 10 minutes + Adamantine/Mithral 1 minute + ====================== ============= Using any material created by this spell as another spell's material component causes that spell to fail. **At Higher Levels:** When you cast this spell using a spell slot of - 6th level or higher, the cube increases by 5 feet for each slot - level above 5th. + 6th level or higher, the cube increases by 5 feet for each slot + level above 5th. """ @@ -1749,6 +1785,7 @@ class CrownOfMadness(Spell): you must use your action to maintain control over the target, or the spell ends. Also, the target can make a Wisdom saving throw at the end of each of its turns. On a success, the spell ends. + """ name = "Crown Of Madness" @@ -1818,9 +1855,9 @@ class CureWounds(Spell): """A creature you touch regains a number of hit points equal to 1d8 + your spellcasting ability modifier. This spell has no effect on undead or constructs. - **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the healing increases by 1d8 for each slot level above 1st. + """ name = "Cure Wounds" diff --git a/dungeonsheets/spells/spells_d.py b/dungeonsheets/spells/spells_d.py index cc63fc3c..2a29f830 100644 --- a/dungeonsheets/spells/spells_d.py +++ b/dungeonsheets/spells/spells_d.py @@ -12,6 +12,7 @@ class DancingLights(Spell): As a bonus action on your turn, you can move the lights up to 60 feet to a new spot within range. A light must be within 20 feet of another light created by this spell, and a light winks out if it exceeds the spell's range. + """ name = "Dancing Lights" @@ -46,6 +47,7 @@ class DanseMacabre(Spell): **At Higher Levels:** When you cast this spell using a spell slot‘ of 6th level or higher, you animate up to two additional corpses for each slot level above 5th. + """ name = "Danse Macabre" @@ -75,6 +77,7 @@ class Darkness(Spell): If any of this spell's area overlaps with an area of light created by a spell of 2nd level or lower, the spell that created the light is dispelled. + """ name = "Darkness" @@ -93,6 +96,7 @@ class Darkvision(Spell): """You touch a willing creature to grant it the ability to see in the dark. For the duration, that creature has darkvision out to a range of 60 feet. + """ name = "Darkvision" @@ -116,6 +120,7 @@ class Dawn(Spell): saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. + """ name = "Dawn" @@ -144,6 +149,7 @@ class Daylight(Spell): If any of this spell's area overlaps with an area of darkness created by a spell of 3rd level or lower, the spell that created the darkness is dispelled. + """ name = "Daylight" @@ -166,6 +172,7 @@ class DeathWard(Spell): in effect when the target is subjected to an effect that would kill it instantaneously without dealing damage, that effect is instead negated against the target, and the spells ends. + """ name = "Death Ward" @@ -203,9 +210,10 @@ class DelayedBlastFireball(Spell): The fire damages objects in the area and ignites flammable objects that aren't being worn or carried. - At - Higher Levels: When you cast this spell using a spell slot of 8th level or + **At + Higher Levels:** When you cast this spell using a spell slot of 8th level or higher, the base damage increases by 1d6 for each slot level above 7th. + """ name = "Delayed Blast Fireball" @@ -235,7 +243,8 @@ class Demiplane(Spell): you know the nature and contents of a demiplane created by a casting of this spell by another creature, you can have the shadowy door connect to its demiplane instead. - """ + +""" name = "Demiplane" level = 8 @@ -255,6 +264,7 @@ class DestructiveWave(Spell): Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage (your choice), and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. + """ name = "Destructive Wave" @@ -278,6 +288,7 @@ class DetectEvilAndGood(Spell): The spell can penetrate most barriers, but it 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 Evil And Good" @@ -301,6 +312,7 @@ class DetectMagic(Spell): 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" @@ -323,6 +335,7 @@ class DetectPoisonAndDisease(Spell): 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 Poison And Disease" @@ -372,6 +385,7 @@ class DetectThoughts(Spell): Once you detect the presence of a creature in this way, you can read its thoughts for the rest of the duration as described above, even if you can't see it, but it must still be within range. + """ name = "Detect Thoughts" @@ -402,6 +416,7 @@ class DimensionDoor(Spell): place already occupied by an object or a creature, you and any creature traveling with you each take 4d6 force damage, and the spell fails to teleport you. + """ name = "Dimension Door" @@ -429,10 +444,11 @@ class DisguiseSelf(Spell): up to physical inspection. For example, if you use this spell to add a hat to your outfit, objects pass through the hat, and anyone who touches it would feel nothing or would feel your head and hair. If you use this spell to appear - thinner than you are, the hand of som eone who reaches out to touch you would + thinner than you are, the hand of someone who reaches out to touch you would bump into you while it was seemingly still in midair. To discern that you are disguised, a creature can use its action to inspect your appearance and must succeed on an Intelligence (Investigation) check against your spell save DC. + """ name = "Disguise Self" @@ -471,6 +487,7 @@ class Disintegrate(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 7th level or higher, the damage increases by 3d6 for each slot level above 6th. + """ name = "Disintegrate" @@ -494,19 +511,20 @@ class DispelEvilAndGood(Spell): You can end the spell early by using either of the following special functions. - Break Enchantment - As your action, you touch a creature you can - reach that is charmed, frightened, or possessed by a celestial, an elemental, a - fey, a fiend, or an undead. The creature you touch is no longer charmed, - frightened, or possessed by such creatures. + Break Enchantment. + As your action, you touch a creature you can + reach that is charmed, frightened, or possessed by a celestial, an elemental, a + fey, a fiend, or an undead. The creature you touch is no longer charmed, + frightened, or possessed by such creatures. + + Dismissal. + As your action, make a + melee spell attack against a celestial, an elemental, a fey, a fiend, or an + undead you can reach. On a hit, you attempt to drive the creature back to its + home plane. The creature must succeed on a Charisma saving throw or be sent back + to its home plane (if it isn't there already). If they aren't on their home + plane, undead are sent to the Shadowfell, and fey are sent to the Feywild. - Dismissal - As your action, make a - melee spell attack against a celestial, an elemental, a fey, a fiend, or an - undead you can reach. On a hit, you attempt to drive the creature back to its - home plane. The creature must succeed on a Charisma saving throw or be sent back - to its home plane (if it isn't there already). If they aren't on their home - plane, undead are sent to the Shadowfell, and fey are sent to the Feywild. """ name = "Dispel Evil And Good" @@ -527,7 +545,7 @@ class DispelMagic(Spell): target, make an ability check using your spellcasting ability. The DC equals 10 + the spell's level. On a successful check, the spell ends. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, you automatically end the effects of a spell on the target if the spell's level is equal to or less than the level of the spell slot you used. @@ -555,9 +573,10 @@ class DissonantWhispers(Spell): or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. A deafened creature automatically succeeds on the save. - At - Higher Levels: When you cast this spell using a spell slot of 2nd level or + **At + Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st + """ name = "Dissonant Whispers" @@ -586,6 +605,7 @@ class Divination(Spell): two or more times before finishing your next long rest, there is a cumulative 25 percent chance for each casting after the first that you get a random reading. The DM makes this roll in secret. + """ name = "Divination" @@ -605,7 +625,8 @@ class Divination(Spell): class DivineFavor(Spell): """Your prayer empowers you with divine radiance. Until the spell ends, your weapon - attacks deal and extra 1d4 radiant damage on a hit. + attacks deal an extra 1d4 radiant damage on a hit. + """ name = "Divine Favor" @@ -681,6 +702,7 @@ class DominateBeast(Spell): spell slot, the duration is concentration, up to 1 hour. When you use a spell slot of 7th level or higher, the duration is concentration, up to 8 hours + """ name = "Dominate Beast" @@ -723,6 +745,7 @@ class DominateMonster(Spell): **At Higher Levels:** When you cast this spell with a 9th-level spell slot, the duration is concentration, up to 8 hours. + """ name = "Dominate Monster" @@ -766,6 +789,7 @@ class DominatePerson(Spell): spell slot, the duration is concentration, up to 1 hour. When you use a spell slot of 8th level or higher, the duration is concentration, up to 8 hours. + """ name = "Dominate Person" @@ -791,6 +815,7 @@ class DragonsBreath(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd. + """ name = "Dragons Breath" @@ -812,7 +837,6 @@ class DrawmijsInstantSummons(Spell): inscribes the name of the item on the sapphire you use as the material component. Each time you cast this spell, you must use a different sapphire. - At any time thereafter, you can use your action to speak the item's name and crush the sapphire. The item instantly appears in your hand regardless of physical or planar distances, and the spell ends. If another creature is holding @@ -822,6 +846,7 @@ class DrawmijsInstantSummons(Spell): Dispel magic or a similar effect successfully applied to the sapphire ends this spell's effect. + """ name = "Drawmijs Instant Summons" @@ -868,6 +893,7 @@ class Dream(Spell): If you have a body part, lock of hair, clipping from a nail, or similar portion of the target's body, the target makes its saving throw with disadvantage. + """ name = "Dream" @@ -876,7 +902,7 @@ class Dream(Spell): casting_range = "Special" components = ("V", "S", "M") materials = """A handful of sand, a dab of ink, and a writing quill plucked from a -sleeping bird""" + sleeping bird""" duration = "8 hours" ritual = False magic_school = "Illusion" @@ -895,37 +921,45 @@ class DruidGrove(Spell): the area, if successful, removes only one of the following effects, not the entire area. That spell's caster chooses which effect to end. Only when all its effects are gone is this spell dispelled. - Solid Fog. You can fill any number of - 5-foot squares on the ground with thick fog, making them heavily obscured. The - fog reaches 10 feet high. In addition, every foot of movement through the fog - costs 2 extra feet. To a creature immune to this effect, the fog obscures - nothing and looks like soft mist, with motes of green light floating in the air. - - Grasping Undergrowth. You can fill any number of 5-foot squares on the ground - that aren't filled with fog with grasping weeds and vines, as if they were - affected by an entangle spell. To a creature immune to this effect, the weeds - and vines feel soft and reshape themselves to serve as temporary seats or beds. - - Grove Guardians. You can animate up to four trees in the area, causing them to - uproot themselves from the ground. These trees have the same statistics as an - awakened tree, which appears in the Monster Manual, except they can't speak, and - their bark is covered with druidic symbols. If any creature not immune to this - effect enters the warded area, the grove guardians fight until they have driven - off or slain the intruders. The grove guardians also obey your spoken commands - (no action required by you) that you issue while in the area. Ifyou don't give - them commands and no intruders are present, the grove guardians do nothing. The - grove guardians can‘t leave the warded area. When the spell ends, the magic - animating them disappears, and the trees take root again if possible. - Additional - Spell Effect. You can place your choice of one of the following magical effects - within the warded area: - - A constant gust of Wind in two locations of your - choice - - Spike growth in one location of your choice - - Wind wall in two - locations of your choice - To a creature immune to this effect, the winds are a - fragrant, gentle breeze, and the area of spike growth is harmless. + + Solid Fog. + You can fill any number of + 5-foot squares on the ground with thick fog, making them heavily obscured. The + fog reaches 10 feet high. In addition, every foot of movement through the fog + costs 2 extra feet. To a creature immune to this effect, the fog obscures + nothing and looks like soft mist, with motes of green light floating in the air. + + Grasping Undergrowth. + You can fill any number of 5-foot squares on the ground + that aren't filled with fog with grasping weeds and vines, as if they were + affected by an entangle spell. To a creature immune to this effect, the weeds + and vines feel soft and reshape themselves to serve as temporary seats or beds. + + Grove Guardians. + You can animate up to four trees in the area, causing them to + uproot themselves from the ground. These trees have the same statistics as an + awakened tree, which appears in the Monster Manual, except they can't speak, and + their bark is covered with druidic symbols. If any creature not immune to this + effect enters the warded area, the grove guardians fight until they have driven + off or slain the intruders. The grove guardians also obey your spoken commands + (no action required by you) that you issue while in the area. If you don't give + them commands and no intruders are present, the grove guardians do nothing. The + grove guardians can‘t leave the warded area. When the spell ends, the magic + animating them disappears, and the trees take root again if possible. + + Additional Spell Effect. + You can place your choice of one of the following magical effects + within the warded area: + + - A constant gust of Wind in two locations of your + choice + - Spike growth in one location of your choice + - Wind wall in two + locations of your choice + + To a creature immune to this effect, the winds are a + fragrant, gentle breeze, and the area of spike growth is harmless. + """ name = "Druid Grove" @@ -975,7 +1009,7 @@ class Druidcraft(Spell): class DustDevil(Spell): - """(a pinch of dust) + """ Choose an unoccupied 5-foot cube of air that you can see within range. An elemental force that resembles a dust devil appears in the cube and lasts for the spell's duration. @@ -983,14 +1017,17 @@ class DustDevil(Spell): feet of the dust devil must make a Strength saving throw. On a failed save, the creature takes 1d8 bludgeoning damage and is pushed 10 feet away. On a successful save, the creature takes half as much damage and isn't pushed. + As a bonus action, you can move the dust devil up to 30 feet in any direction. If the dust devil moves over sand, dust, loose dirt, or small gravel, it sucks up the material and forms a 10-foot-radius cloud of debris around itself that lasts until the start of your next turn. The cloud heavily obscures its area. - At - Higher Levels. When you cast this spell using a spell slot of 3rd level or + + **At + Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. + """ name = "Dust Devil" @@ -998,7 +1035,7 @@ class DustDevil(Spell): casting_time = "1 action" casting_range = "60 feet" components = ("V", "S", "M") - materials = "" + materials = "A pinch of dust" duration = "Instantaneous" ritual = False magic_school = "Conjuration" diff --git a/dungeonsheets/spells/spells_e.py b/dungeonsheets/spells/spells_e.py index e6669491..ec66526a 100644 --- a/dungeonsheets/spells/spells_e.py +++ b/dungeonsheets/spells/spells_e.py @@ -8,6 +8,7 @@ class EarthTremor(Spell): that area is loose earth or stone, it becomes difficult terrain until cleared. At Higher Levels. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. + """ name = "Earth Tremor" @@ -28,6 +29,7 @@ class Earthbind(Spell): its flying speed (if any) is reduced to 0 feet for the spell's duration. An airborne creature affected by this spell descends at 60 feet per round until it reaches the ground or the spell ends. + """ name = "Earthbind" @@ -46,7 +48,7 @@ class Earthquake(Spell): """You create a seismic disturbance at a point on the ground that you can see within range. For the duration, an intense tremor rips through the ground in a - 100-foot- radius circle centered on that point and shakes creatures and + 100-foot-radius circle centered on that point and shakes creatures and structures in contact with the ground in that area. The ground in the area @@ -58,7 +60,6 @@ class Earthquake(Spell): you spend concentrating on it, each creature on the ground in the area must make a Dexterity saving throw. On a failed save, the creature is knocked prone. - This spell can have additional effects depending on the terrain in the area, as determined by the DM. @@ -85,6 +86,7 @@ class Earthquake(Spell): DC 20 Strength (Athletics) check as an action to escape. The DM can adjust the DC higher or lower, depending on the nature of the rubble. On a successful save, the creature takes half as much damage and doesn't fall prone or become buried. + """ name = "Earthquake" @@ -103,7 +105,6 @@ class EldritchBlast(Spell): """A beam of crackling energy streaks toward a creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 force damage. - **At Higher Levels:** The spell creates more than one beam when you reach higher levels: Two beams at 5th level @@ -112,6 +113,7 @@ class EldritchBlast(Spell): level. You can direct the beams at the same target or at different ones. Make a separate attack roll for each beam. + """ name = "Eldritch Blast" @@ -139,6 +141,7 @@ class ElementalBane(Spell): cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. + """ name = "Elemental Bane" @@ -166,6 +169,7 @@ class ElementalWeapon(Spell): When you use a spell slot of 7th level or higher, the bonus increases to +3 and the extra damage increases to 3d4. + """ name = "Elemental Weapon" @@ -191,6 +195,7 @@ class EnemiesAbound(Spell): creatures it can see within range of the attack, spell, or other ability it's using. If an enemy provokes an opportunity attack from the affected creature, the creature must make that attack if it is able to. + """ name = "Enemies Abound" @@ -216,9 +221,9 @@ class Enervation(Spell): has total cover from you. Whenever the spell deals damage to a target, you regain hit points equal to half the amount of necrotic damage the target takes. - **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th. + """ name = "Enervation" @@ -237,22 +242,26 @@ class EnhanceAbility(Spell): """You touch a creature and bestow upon it a magical enhancement. Choose one of the following effects: the target gains the effect until the spell ends. - - **Bear's Endurance.** The target has advantage on Constitution checks. It also gains 2d6 + Bear's Endurance. + The target has advantage on Constitution checks. It also gains 2d6 temporary hit points, which are lost when the spell ends. - - **Bull's Strength.** The - target has advantage on Strength checks, and his or her carrying capacity + Bull's Strength. + The target has advantage on Strength checks, and his or her carrying capacity doubles. - - **Cat's Grace.** The target has advantage on Dexterity checks. It also + Cat's Grace. + The target has advantage on Dexterity checks. It also doesn't take damage from falling 20 feet or less if it isn't incapacitated. - - **Eagle's Splendor.** The target has advantage on Charisma checks. - - **Fox's Cunning.** - The target thas advantage on Intelligence checks. - - **Owl's Wisdom.** The target has - advantage on Wisdom checks. + Eagle's Splendor. + The target has advantage on Charisma checks. + Fox's Cunning. + The target has advantage on Intelligence checks. + Owl's Wisdom. + The target has advantage on Wisdom checks. **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 = "Enhance Ability" @@ -277,25 +286,26 @@ class Enlargereduce(Spell): everything it is wearing and carrying changes size with it. Any item dropped by an affected creature returns to normal size at once. - Enlarge - The target's - size doubles in all dimensions, and its weight is multiplied by eight. This - growth increases its size by one category – from Medium to Large, for example. - If there isn't enough room for the target to double its size, the creature or - object attains the maximum possible size in the space available. Until the spell - ends, the target also has advantage on Strength checks and Strength saving - throws. The target's weapons also grow to match its new size. While these - weapons are enlarged, the target's attack with them deal 1d4 extra damage. - - - Reduce - The target's size is halved in all dimensions, and its weight is reduced - to one-eighth of normal. This reduction decreases its size by one category – - from Medium to Small, for example. Until the spell ends, the target also has - disadvantage on Strength checks and Strength saving throws. The target's weapons - also shrink to match its new size. While these weapons are reduced, the - target's attacks with them deal 1d4 less damage (this can't reduce the damage - below 1). + Enlarge. + The target's + size doubles in all dimensions, and its weight is multiplied by eight. This + growth increases its size by one category – from Medium to Large, for example. + If there isn't enough room for the target to double its size, the creature or + object attains the maximum possible size in the space available. Until the spell + ends, the target also has advantage on Strength checks and Strength saving + throws. The target's weapons also grow to match its new size. While these + weapons are enlarged, the target's attack with them deal 1d4 extra damage. + + + Reduce. + The target's size is halved in all dimensions, and its weight is reduced + to one-eighth of normal. This reduction decreases its size by one category – + from Medium to Small, for example. Until the spell ends, the target also has + disadvantage on Strength checks and Strength saving throws. The target's weapons + also shrink to match its new size. While these weapons are reduced, the + target's attacks with them deal 1d4 less damage (this can't reduce the damage + below 1). + """ name = "Enlarge/Reduce" @@ -326,6 +336,7 @@ class EnsnaringStrike(Spell): **At Higher Levels:** If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. + """ name = "Ensnaring Strike" @@ -352,6 +363,7 @@ class Entangle(Spell): frees itself. When the spell ends, the conjured plants wilt away. + """ name = "Entangle" @@ -375,6 +387,7 @@ class Enthrall(Spell): checks made to perceive any creature other than you until the spell ends or until the target can no longer hear you. The spell ends if you are incapacitated or can no longer speak. + """ name = "Enthrall" @@ -400,6 +413,7 @@ class EruptingEarth(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4rd level or higher, the damage increases by 1d12 for each slot level above 3rd. + """ name = "Erupting Earth" @@ -422,18 +436,17 @@ class Etherealness(Spell): costs an extra foot. You can see and hear the plan you originated from, but everything there looks gray, and you can't see anything more than 60 feet away. - While on the Ethereal Plane, you can only affect and be affected by other - creatures on that plane. Creatures that aren't on the Ethereal Plance can't + creatures on that plane. Creatures that aren't on the Ethereal Plane can't perceive you and can't interact with you, unless a special ability or magic has given them the ability to do so. You ignore all objects and effects that aren't on the Ethereal Plane, allowing you to move through objects you perceive on the plan you originated from. When the spell ends, you immediately return to - the plane you originiated from in teh spot you currently occupy. If you occupy + the plane you originated from in the spot you currently occupy. If you occupy the same spot as a solid object or creature when this happens, you are - imediately shunted to the neares unoccupied space that you can occupy and take + immediately shunted to the nearest unoccupied space that you can occupy and take force damage equal to twice the number of feet you are moved. This spell has @@ -474,6 +487,7 @@ class EvardsBlackTentacles(Spell): creature restrained by the tentacles can use its action to make a Strength or Dexterity check (its choice) against your spell save DC. On a success, it frees itself. + """ name = "Evards Black Tentacles" @@ -492,6 +506,7 @@ class ExpeditiousRetreat(Spell): """This spell allows you to move at an incredible pace. When you cast this spell, and then as a bonus action on each of your turns until the spell ends, you can take the Dash action. + """ name = "Expeditious Retreat" @@ -516,19 +531,19 @@ class Eyebite(Spell): again if it has succeeded on a saving throw against this casting of eyebite. - Asleep + Asleep. The target falls unconscious. It wakes up if it takes any damage or if another creature uses its action to shake the sleeper awake. - Panicked + Panicked. The target is frightened of you. On each of its turns, the frightened creature must take the Dash action and move away from you by the safest and shortest available route, unless there is nowhere to move. If the target moves to a place at least 60 feet away from you where it can no longer see you, this effect ends. - Sickened + Sickened. The target has disadvantage on attack rolls and ability checks. At the end of each of its turns, it can make another Wisdom saving throw. If it succeeds, the effect ends. diff --git a/dungeonsheets/spells/spells_f.py b/dungeonsheets/spells/spells_f.py index 867c50a0..1bf24794 100644 --- a/dungeonsheets/spells/spells_f.py +++ b/dungeonsheets/spells/spells_f.py @@ -20,6 +20,7 @@ class Fabricate(Spell): to create items that ordinarily require a high degree of craftsmanship, such as jewelry, weapons, glass, or armor, unless you have proficiency with the type of artisan's tools used to craft such objects. + """ name = "Fabricate" @@ -44,6 +45,7 @@ class FaerieFire(Spell): Any attack roll against an affected creature or object has advantage if the attacker can see it, and the affected creature or object can't benefit from being invisible. + """ name = "Faerie Fire" @@ -65,6 +67,7 @@ class FalseLife(Spell): **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" @@ -83,6 +86,7 @@ class FarStep(Spell): """You teleport up to 60 feet to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. + """ name = "Far Step" @@ -108,6 +112,7 @@ class Fear(Spell): creature ends its turn in a location where it doesn't have line of sight to you, the creature can make a Wisdom saving throw. On a successful save, the spell ends for that creature. + """ name = "Fear" @@ -130,6 +135,7 @@ class FeatherFall(Spell): 60 feet per round until the spell ends. If the creature lands before the spell ends, it takes no falling damage and can land on its feet, and the spell ends for that creature. + """ name = "Feather Fall" @@ -159,6 +165,7 @@ class Feeblemind(Spell): throw against this spell. If it succeeds on its saving throw, the spell ends. The spell can also be ended by greater restoration, heal or wish. + """ name = "Feeblemind" @@ -185,6 +192,7 @@ class FeignDeath(Spell): resistance to all damage except psychic damage. If the target is diseased or poisoned when you cast the spell, or becomes diseased or poisoned while under the spell's effect, the disease and poison have no effect until the spell ends. + """ name = "Feign Death" @@ -206,7 +214,6 @@ class FindFamiliar(Spell): unoccupied space within range, the familiar has the statistics of the chosen form, though it is a celestial, fey or fiend (your choice) instead of a beast. - Your familiar acts independently of you, but it always obeys your commands. In combat, it rolls its own initiative and acts on its own turn. A familiar can't attack, but it can take other actions as normal. @@ -221,7 +228,6 @@ class FindFamiliar(Spell): your next turn, gaining the benefits of any special senses that the familiar has. During this time, you are deaf and blind with regard to your own senses. - As an action, you can temporarily dismiss your familiar. It disappears into a pocket dimension where it awaits you summons. Alternatively, you can dismiss it forever. As an action while it is temporarily dismissed, you can cause it to @@ -237,6 +243,7 @@ class FindFamiliar(Spell): as if it had cast the spell. Your familiar must be within 100 feet of you, and it must use its reaction to deliver the spell when you cast it. If the spell requires an attack roll, you use your attack modifier for the roll. + """ name = "Find Familiar" @@ -263,7 +270,7 @@ class FindGreaterSteed(Spell): of its normal creature type. Additionally, if it has an Intelligence score of 5 or lower, its Intelligence becomes 6, and it gains the ability to understand one language of your choice that you speak. You control the mount in combat. While - the mount is within 1 mile of you, you can communicate with it te1epathically. + the mount is within 1 mile of you, you can communicate with it telepathically. While mounted on it, you can make any spell you cast that targets only you also target the mount. The mount disappears temporarily when it drops to 0 hit points or when you dismiss it as an action. Casting this spell again re-summons the @@ -272,6 +279,7 @@ class FindGreaterSteed(Spell): time. As an action, you can release a mount from its bond, causing it to disappear permanently. Whenever the mount disappears, it leaves behind any objects it was wearing or carrying. + """ name = "Find Greater Steed" @@ -311,6 +319,7 @@ class FindSteed(Spell): your steed is within 1 mile of you, you can communicate with it telepathically. You can't have more than one steed bonded by this spell at a time. As an action, you can release the steed from its bond at any time, causing it to disappear. + """ name = "Find Steed" @@ -335,9 +344,10 @@ class FindThePath(Spell): For the duration, as long as you are on the same plane of existence as the destination, you know how far it is and in what direction it lies. While you are traveling there, whenever you - are presented with a choice of paths along the way, you atomatically determine + are presented with a choice of paths along the way, you automatically determine which path is the shortest and most direct route (but not necessarily the safest route) to the destination." + """ name = "Find The Path" @@ -368,6 +378,7 @@ class FindTraps(Spell): This spell merely reveals that a trap is present. You don't learn the location of each trap, but you do learn the general nature of the danger posed by a trap you sense. + """ name = "Find Traps" @@ -392,6 +403,7 @@ class FingerOfDeath(Spell): A humanoid killed by this spell rises at the start of your next turn as a zombie that is permanently under your command, following your verbal orders to the best of its ability. + """ name = "Finger Of Death" @@ -411,9 +423,9 @@ class FireBolt(Spell): spell attack against the target. On a hit, the target takes 1d10 fire damage. A flammable object hit by this spell ignites if it isn't being worn or carried. - **At Higher Levels:** This spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10). + """ name = "Fire Bolt" @@ -441,6 +453,7 @@ class FireShield(Spell): In addition, whenever a creature within 5 feet of you hits you with a melee attack, the shield erupts with flame. The attacker takes 2d8 fire damage from a warm shield, or 2d8 cold damage from a cold shield. + """ name = "Fire Shield" @@ -467,6 +480,7 @@ class FireStorm(Spell): The fire damages objects in the area and ignites flammable objects that aren't being worn or carried. If you choose, plant life in the area is unaffected by this spell. + """ name = "Fire Storm" @@ -518,6 +532,7 @@ class FlameArrows(Spell): this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. + """ name = "Flame Arrows" @@ -547,6 +562,7 @@ class FlameBlade(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for every two slot levels above 2nd. + """ name = "Flame Blade" @@ -571,6 +587,7 @@ class FlameStrike(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the fire damage or the radiant damage (your choice) increases by 1d6 for each slot level above 5th. + """ name = "Flame Strike" @@ -605,6 +622,7 @@ class FlamingSphere(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd. + """ name = "Flaming Sphere" @@ -629,17 +647,17 @@ class FleshToStone(Spell): successful save, the creature isn't affected. A creature restrained by this - spell must make another Consititution saving throw at the end of each of its + spell must make another Constitution saving throw at the end of each of its turns. If it successfully saves against this spell three times, the spell ends. If it fails saves three times, it is turned to stone and subjected to the petrified condition for the duration. The successes and failures don't need to be consecutive; keep track of both until the target collects three of a kind. - If the creature is physically broken while petrified, it suffers from similar deformities if it reverts to its original state. If you maintain your concentration on this spell for the entire possible duration, the creature is turned to stone until the effect is removed. + """ name = "Flesh To Stone" @@ -662,6 +680,7 @@ class Fly(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, you can target one additional creature for each slot level above 3rd. + """ name = "Fly" @@ -685,6 +704,7 @@ class FogCloud(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the radius of the fog increases by 20 feet for each slot level above 1st. + """ name = "Fog Cloud" @@ -722,6 +742,7 @@ class Forbiddance(Spell): area of another forbiddance spell. If you cast forbiddance every day for 30 days in the same location, the spell lasts until it is dispelled, and the material components are consumed on the last casting. + """ name = "Forbiddance" @@ -765,6 +786,7 @@ class Forcecage(Spell): spell or effect. The cage also extends into the Ethereal Plane, blocking ethereal travel. This spell can't be dispelled by dispel magic. + """ name = "Forcecage" @@ -787,6 +809,7 @@ class Foresight(Spell): duration. This spell immediately ends if you cast it again before its duration ends. + """ name = "Foresight" @@ -811,6 +834,7 @@ class FreedomOfMovement(Spell): escape from nonmagical restraints, such as manacles or a creature that has it grappled. Finally, being underwater imposes no penalties on the target's movement or attacks. + """ name = "Freedom Of Movement" @@ -832,6 +856,7 @@ class Friends(Spell): toward you. A creature prone to violence might attack you. Another creature might seek retribution in other ways (at the DM's discretion), depending on the nature of your interaction with it. + """ name = "Friends" @@ -853,6 +878,7 @@ class Frostbite(Spell): makes before the end of its next turn. The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6). + """ name = "Frostbite" diff --git a/dungeonsheets/spells/spells_g.py b/dungeonsheets/spells/spells_g.py index cb8110d0..9906d076 100644 --- a/dungeonsheets/spells/spells_g.py +++ b/dungeonsheets/spells/spells_g.py @@ -58,7 +58,7 @@ class Gate(Spell): opens in the named creature's immediate vicinity and draws the creature through it to the nearest unoccupied space on your side of the portal. You gain no special power over the creature, and it - is free to act as the Dm deems appropriate. It might leave, attack + is free to act as the DM deems appropriate. It might leave, attack you, or help you. """ @@ -78,7 +78,7 @@ class Gate(Spell): class Geas(Spell): """You place a magical command on a creature that you can see within range, forcing it to carry out some service or refrain from some - action or course of actiity as you decide. + action or course of activity as you decide. If the creature can understand you, it must succeed on a Wisdom saving throw or become charmed by you for the duration. While the @@ -93,7 +93,7 @@ class Geas(Spell): action to dismiss it. A remove curse, greater restoration, or wish spell also ends it. - **At Higher Levels:** When you cast this spell usinga spell slot of + **At Higher Levels:** When you cast this spell using a spell slot of 7th or 8th level, the duration is 1 year. When you cast this spell using a spell slot of 9th level, the spell lasts until it is ended by one of the spells mentioned above. @@ -142,7 +142,7 @@ class GiantInsect(Spell): """You transform up to ten centipedes, three spiders, five wasps, or one scorpion within range into giant versions of their natural forms for the duration. A centipede becomes a giant centipede, a - spider becaomes a giant spider, a wasp becomes a giant wasp, and a + spider becomes a giant spider, a wasp becomes a giant wasp, and a scorpion becomes a giant scorpion. Each creature obeys your verbal commands, and in combat, they act @@ -256,26 +256,26 @@ class GlyphOfWarding(Spell): 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. + 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:** When you cast this spell using a spell slot of 4th Level or higher, the damage of an explosive runes glyph @@ -296,63 +296,7 @@ class GlyphOfWarding(Spell): 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", - ) + classes = ("Artificer", "Bard", "Cleric", "Wizard") class Goodberry(Spell): @@ -362,6 +306,7 @@ class Goodberry(Spell): creature for one day. The berries lose their potency if they have not been consumed within 24 hours of the casting of this spell. + """ name = "Goodberry" @@ -385,6 +330,7 @@ class GraspingVine(Spell): Until the spell ends, you can direct the vine to lash out at the same creature or another one as a bonus action on each of your turns. + """ name = "Grasping Vine" @@ -407,6 +353,7 @@ class Grease(Spell): appears, each creature standing in its area must succeed on a Dexterity saving throw or fall prone. A creature that enters the area or ends its turn there must also succeed on a Dexterity saving throw or fall prone. + """ name = "Grease" @@ -477,9 +424,10 @@ class GreenFlameBlade(Spell): 1d8 fire damage to the target, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th level and 17th level. + """ - name = "Green-Flame Blade" + name = "Green Flame Blade" level = 0 casting_time = "1 action" casting_range = "5 feet" @@ -502,6 +450,7 @@ class GuardianOfFaith(Spell): Dexterity saving throw. The creature takes 20 radiant damage on a failed save, or half as much damage on a successful one. The guardian vanishes when it has dealt a total of 60 damage. + """ name = "Guardian Of Faith" @@ -522,24 +471,26 @@ class GuardianOfNature(Spell): ends. You choose one of the following forms to assume: Primal Beast or Great Tree. - **Primal Beast.** Bestial fur covers your body, your facial - features become feral, and you gain the following benefits: + Primal Beast. + Bestial fur covers your body, your facial + features become feral, and you gain the following benefits: - - Your walking speed increases by 10 feet. - - You gain darkvision with a range of 120 feet. - - You make Strength-based attack rolls with advantage. - - Your melee weapon attacks deal an extra 1d6 force damage on a - hit. + - Your walking speed increases by 10 feet. + - You gain darkvision with a range of 120 feet. + - You make Strength-based attack rolls with advantage. + - Your melee weapon attacks deal an extra 1d6 force damage on a + hit. - **Great Tree.** Your skin appears barky, leaves sprout from your - hair, and you gain the following benefits: + Great Tree. + Your skin appears barky, leaves sprout from your + hair, and you gain the following benefits: - - You gain 10 temporary hit points. - - You make Constitution saving throws with advantage. - - You make Dexterity- and Wisdom-based attack rolls with - advantage. - - While you are on the ground, the ground within 15 feet of you is - difficult terrain for your enemies. + - You gain 10 temporary hit points. + - You make Constitution saving throws with advantage. + - You make Dexterityand Wisdom-based attack rolls with + advantage. + - While you are on the ground, the ground within 15 feet of you is + difficult terrain for your enemies. """ @@ -571,20 +522,24 @@ class GuardsAndWards(Spell): Guards and wards creates the following effects within the warded area. - - **Corridors.** Fog fills all the warded corridors, making them + Corridors. + Fog fills all the warded corridors, making them heavily obscured. In addition, at each intersection or branching passage offering a choice of direction, there is a 50 percent chance that a creature other than you will believe it is going in the opposite direction from the one it chooses. - - **Doors.** All doors in the warded area are magically locked, as + Doors. + All doors in the warded area are magically locked, as if sealed by an arcane lock spell. In addition, you can cover up to ten doors with an illusion (equivalent to the illusory object - function of the m inor illusion spell) to make them appear as + function of the minor illusion spell) to make them appear as plain sections of wall. - - **Stairs.** Webs fill all stairs in the warded area from top to + Stairs. + Webs fill all stairs in the warded area from top to bottom, as the web spell. These strands regrow in 10 minutes if they are burned or torn away while guards and wards lasts. - - **Other Spell Effect.** You can place your choice of one of the + Other Spell Effect. + You can place your choice of one of the following magical effects within the warded area of the stronghold. @@ -627,6 +582,7 @@ class Guidance(Spell): """You touch one willing creature. Once before the spell ends, the target can roll a d4 and add the number rolled to one ability check of its choice. It can roll the die before or after making the ability check. The spell then ends. + """ name = "Guidance" diff --git a/dungeonsheets/spells/spells_h.py b/dungeonsheets/spells/spells_h.py index 43e5f163..7fd70ebb 100644 --- a/dungeonsheets/spells/spells_h.py +++ b/dungeonsheets/spells/spells_h.py @@ -12,6 +12,7 @@ class HailOfThorns(Spell): **At Higher Levels:** If you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st (to a maximum of 6d10). + """ name = "Hail Of Thorns" @@ -48,50 +49,50 @@ class Hallow(Spell): it can make a Charisma saving throw. On a success, the creature ignores the extra effect until it leaves the area. - Courage - Affected creatures can't be - frightened while in the area. + Courage. + Affected creatures can't be + frightened while in the area. - Darkness - Darkness fills the area. Normal light, - as well as magical light created by spells of a lower level than the slot you - used to cast this spell, can't illuminate the area. + Darkness. + Darkness fills the area. Normal light, + as well as magical light created by spells of a lower level than the slot you + used to cast this spell, can't illuminate the area. - Daylight - Bright light fills - the area. Magical darkness created by spells of a lower level than the slot you - used to cast this spell can't extinguish the light. + Daylight. + Bright light fills + the area. Magical darkness created by spells of a lower level than the slot you + used to cast this spell can't extinguish the light. - Energy Protection - Affected - creatures in the area have resistance to one damage type of your choice, except - for bludgeoning, piercing, or slashing. + Energy Protection. + Affected + creatures in the area have resistance to one damage type of your choice, except + for bludgeoning, piercing, or slashing. - Energy Vulnerability - Affected - creatures in the area have vulnerability to one damage type of your choice, - except for bludgeoning, piercing, or slashing. + Energy Vulnerability. + Affected + creatures in the area have vulnerability to one damage type of your choice, + except for bludgeoning, piercing, or slashing. - Everlasting Rest - Dead bodies - interred in the area can't be turned into undead. + Everlasting Rest. + Dead bodies + interred in the area can't be turned into undead. - Extradimensional Interference + Extradimensional Interference. + Affected creatures can't move or travel using teleportation or by + extradimensional or interplanar means. - Affected creatures can't move or travel using teleportation or by - extradimensional or interplanar means. + Fear. + Affected creatures are frightened + while in the area. - Fear - Affected creatures are frightened - while in the area. + Silence. + No sound can emanate from within the area, and no + sound can reach into it. - Silence - No sound can emanate from within the area, and no - sound can reach into it. + Tongues. + Affected creatures can communicate with any + other creature in the area, even if they don't share a common language. - Tongues - Affected creatures can communicate with any - other creature in the area, even if they don't share a common language. """ name = "Hallow" @@ -123,6 +124,7 @@ class HallucinatoryTerrain(Spell): can attempt an Intelligence (Investigation) check against your spell save DC to disbelieve it. A creature who discerns the illusion for what it is, sees it as a vague image superimposed on the terrain. + """ name = "Hallucinatory Terrain" @@ -146,6 +148,7 @@ class Harm(Spell): its hit point maximum is reduced for 1 hour by an amount equal to the necrotic damage it took. Any effect that removes a disease allows a creature's hit point maximum to return to normal before that time passes. + """ name = "Harm" @@ -169,6 +172,7 @@ class Haste(Spell): When the spell ends, the target can't move or take actions until after its next turn, as a wave of lethargy + sweeps over it. """ @@ -191,8 +195,9 @@ class Heal(Spell): no effect on constructs or undead. **At Higher Levels:** When you cast this spell - using aspell slot of 7th level or higher, the amount of healing increases by 10 + using a spell slot of 7th level or higher, the amount of healing increases by 10 for each slot level above 6th. + """ name = "Heal" @@ -220,6 +225,7 @@ class HealingSpirit(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the healing increases 1d6 for each slot level above 2nd. + """ name = "Healing Spirit" @@ -243,6 +249,7 @@ class HealingWord(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the healing increases by 1d4 for each slot level above 1st. + """ name = "Healing Word" @@ -273,6 +280,7 @@ class HeatMetal(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. + """ name = "Heat Metal" @@ -299,6 +307,7 @@ class HellishRebuke(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st. + """ name = "Hellish Rebuke" @@ -324,6 +333,7 @@ class HeroesFeast(Spell): immune to poison and being frightened, and makes all Wisdom saving throws with advantage. Its hit point maximum also increases by 2d10, and it gains the same number of hit points. These benefits last for 24 hours. + """ name = "Heroes Feast" @@ -350,6 +360,7 @@ class Heroism(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. + """ name = "Heroism" @@ -382,6 +393,7 @@ class Hex(Spell): spell for up to 8 hours. When you use a spell slot of 5th level or higher, you can maintain your concentration on the spell for up to 24 hours. + """ name = "Hex" @@ -406,6 +418,7 @@ class HoldMonster(Spell): When you cast this spell using a spell slot of 6th level or higher, you can target one additional creature for each slot level above 5th. The creatures must be within 30 feet of each other when you target them. + """ name = "Hold Monster" @@ -430,6 +443,7 @@ class HoldPerson(Spell): slot of 3rd level or higher, you can target one additional humanoid for each slot level above 2nd. The humanoids must be within 30 feet of each other when you target them. + """ name = "Hold Person" @@ -453,6 +467,7 @@ class HolyAura(Spell): spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, the aura flashes with brilliant light. The attacker must succeed on a Constitution saving throw or be blinded until the spell ends. + """ name = "Holy Aura" @@ -478,11 +493,12 @@ class HolyWeapon(Spell): hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you - can see within 30 feet ofyou must make a Constitution saving throw. On a failed + can see within 30 feet of you must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the - end of each Ofits turns, a blinded creature can make a Constitution saving - throw, ending the effect on itselfon a success. + end of each of its turns, a blinded creature can make a Constitution saving + throw, ending the effect on itself on a success. + """ name = "Holy Weapon" @@ -510,6 +526,7 @@ class HungerOfHadar(Spell): the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherwordly tentacles rub against it. + """ name = "Hunger Of Hadar" @@ -539,6 +556,7 @@ class HuntersMark(Spell): When you use a spell slot of 5th level or higher, you can maintain your concentration on the spell for up to 24 hours. + """ name = "Hunters Mark" @@ -564,6 +582,7 @@ class HypnoticPattern(Spell): The spell ends for an affected creature if it takes any damage or if someone else uses an action to shake the creature out of its stupor. + """ name = "Hypnotic Pattern" diff --git a/dungeonsheets/spells/spells_i.py b/dungeonsheets/spells/spells_i.py index 14a40fdc..65a2a041 100644 --- a/dungeonsheets/spells/spells_i.py +++ b/dungeonsheets/spells/spells_i.py @@ -7,9 +7,11 @@ class IceKnife(Spell): the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. - At Higher Levels. + + **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the cold damage increases by 1d6 for each slot level above 1st. + """ name = "Ice Knife" @@ -38,6 +40,7 @@ class IceStorm(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 5th level or higher, the bludgeoning damage increases by 1d8 for each slot level above 4th. + """ name = "Ice Storm" @@ -62,6 +65,7 @@ class Identify(Spell): If you instead touch a creature throughout the casting, you learn what spells, if any, are currently affecting it. + """ name = "Identify" @@ -82,6 +86,7 @@ class IdInsinuation(Spell): on a Wisdom saving throw or be incapacitated. At the end of each of its turns, it takes 1d12 psychic damage, and it can then make another Wisdom saving throw. On a success, the spell ends on the target. + """ name = "Id Insinuation" @@ -99,19 +104,24 @@ class IllusoryDragon(Spell): shadowy dragon in an unoccupied space that you can see within range. The illusion lasts for the spell's duration and occupies its space, as if it were a creature. + When the illusion appears, any of your enemies that can see it must succeed on a Wisdom saving throw or become frightened of it for 1 minute. If a frightened creature ends its turn in a location where it doesn't have line of sight to the illusion, it can repeat the saving throw, ending the effect on itself on a success. + As a bonus action on your turn, you can move the illusion up to 60 feet. At any point during its movement, you can cause it to exhale a - blast of energy in a 60-foot cone originating from its space. When you create + blast of energy in a 60-foot cone originating from its space. + + When you create the dragon, choose a damage type: acid, cold, fire, lightning, necrotic, or poison. Each creature in the cone must make an Intelligence saving throw, taking - '7d6 damage of the + 7d6 damage of the chosen damage type on a failed save, or half as much damage on a successful one. + The illusion is tangible because of the shadow stuff used to create it, but attacks miss it automatically. it succeeds on all saving throws, and it is immune to all damage and conditions. A creature that uses an @@ -119,6 +129,7 @@ class IllusoryDragon(Spell): on an Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through it and has advantage on saving throws against its breath. + """ name = "Illusory Dragon" @@ -149,6 +160,7 @@ class IllusoryScript(Spell): be dispelled, the original script and the illusion both disappear. A creature with truesight can read the hidden message. + """ name = "Illusory Script" @@ -174,6 +186,7 @@ class Immolation(Spell): by nonmagical means. If damage from this spell kills a target, the target is turned to ash. + """ name = "Immolation" @@ -199,56 +212,55 @@ class Imprisonment(Spell): When you cast the spell, you choose one of the following forms of imprisonment. - Burial - The - target is entombed far beneath the earth in a sphere of magical force that is - just large enough to contain the target. Nothing can pass through the - sphere, nor can any creature teleport or use planar travel to get into or out of - it. - The special component for this version of the spell is a small mithral orb. - - - Chaining - Heavy chains, firmly rooted in the ground, hold the target in place. - The target is restrained until the spell ends, and it can't move or be moved by - any means until then. - The special component for this version of the spell is - a fine chain of precious metal. - - Hedged Prison - The spell transports the target - into a tiny demiplane that is warded against teleportation and planar travel. - The demiplane can be a labyrinth, a cage, a tower, or any similar confined - structure or area of your choice. - The special component for this version of the - spell is a miniature representation of the prison made from jade. - - Minimus - Containment - The target shrinks to a height of 1 inch and is imprisoned inside a - gemstone or similarobject. Light can pass through the gemstone - normally (allowing the target to see out and other creatures to see in), but - nothing else can pass through, even by means of teleportation or planar travel. - The gemstone can't be cut or broken while the spell remains in effect. - The - special component for this version of the spell is a large, transparent - gemstone, such as a corundum, diamond, or ruby. - - Slumber - The target falls asleep - and can't be awoken. - The special component for this version of the - spell consists of rare soporific herbs. - - Ending the Spell - During the casting of - the spell, in any of its versions, you can specify a condition that will cause - the spell to end and release the target. The condition can be as specific or as - elaborate as you choose, but the DM must agree that the condition is reasonable - and has a likelihood of coming to pass. The conditions can be based on a - creature's name, identity, or deity but otherwise must be based on - observable actions or qualities and not based on intangibles such as level, - class, or hit points. + Burial. + The + target is entombed far beneath the earth in a sphere of magical force that is + just large enough to contain the target. Nothing can pass through the + sphere, nor can any creature teleport or use planar travel to get into or out of + it. + The special component for this version of the spell is a small mithral orb. + + + Chaining. + Heavy chains, firmly rooted in the ground, hold the target in place. + The target is restrained until the spell ends, and it can't move or be moved by + any means until then. + The special component for this version of the spell is + a fine chain of precious metal. + + Hedged Prison. + The spell transports the target + into a tiny demiplane that is warded against teleportation and planar travel. + The demiplane can be a labyrinth, a cage, a tower, or any similar confined + structure or area of your choice. + The special component for this version of the + spell is a miniature representation of the prison made from jade. + + Minimus Containment. + The target shrinks to a height of 1 inch and is imprisoned inside a + gemstone or similar object. Light can pass through the gemstone + normally (allowing the target to see out and other creatures to see in), but + nothing else can pass through, even by means of teleportation or planar travel. + The gemstone can't be cut or broken while the spell remains in effect. + The + special component for this version of the spell is a large, transparent + gemstone, such as a corundum, diamond, or ruby. + + Slumber. + The target falls asleep + and can't be awoken. + The special component for this version of the + spell consists of rare soporific herbs. + + Ending the Spell. + During the casting of + the spell, in any of its versions, you can specify a condition that will cause + the spell to end and release the target. The condition can be as specific or as + elaborate as you choose, but the DM must agree that the condition is reasonable + and has a likelihood of coming to pass. The conditions can be based on a + creature's name, identity, or deity but otherwise must be based on + observable actions or qualities and not based on intangibles such as level, + class, or hit points. A dispel magic spell can end the spell only if it is cast as a 9th-level spell, targeting either the prison or the special component @@ -293,6 +305,7 @@ class IncendiaryCloud(Spell): The cloud moves 10 feet directly away from you in a direction that you choose at the start of each of your turns. + """ name = "Incendiary Cloud" @@ -313,27 +326,31 @@ class InfernalCalling(Spell): barbed devil or a bearded devil. The devil appears in an unoccupied space that you can see within range. The devil disappears when it drops to 0 hit points or when the spell ends. + The devil is unfriendly toward you and your companions. Roll initiative for the devil, which has its own turns. It is under the Dungeon Master's control and acts according to its nature on each of its turns, which might result in its attacking you if it thinks it can prevail, or trying to tempt you to undertake an evil act in exchange for limited service. The DM has the creature's statistics. + On each of your turns, you can try to issue a verbal command to the devil (no action required by you). It obeys the command if the likely outcome is in accordance with its desires, especially if the result would draw you toward evil. Otherwise, you must make a Charisma (Deception, Intimidation, or Persuasion) check contested by its Wisdom (Insight) check. You - make the check with advantage if you say the devil's true name. Ifyour check + make the check with advantage if you say the devil's true name. If your check fails, the devil becomes immune to your verbal commands for the duration of the spell, though it can still carry out your commands if it chooses. If your check - succeeds, the devil carries out your command- such as "attack my enemies," + succeeds, the devil carries out your command - such as "attack my enemies," "explore the room ahead," or "bear this message to the queen"-until it completes the activity, at which point it returns to you to report having done so. + If your concentration ends before the spell reaches its full duration, the devil doesn‘t disappear if it has become immune to your verbal commands. Instead, it acts in whatever manner it chooses for 3d6 minutes, and then it disappears. + If you possess an individual devil's talisman, you can summon that devil if it is of the appropriate challenge @@ -343,6 +360,7 @@ class InfernalCalling(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the challenge rating increases by 1 for each slot level above 5th. + """ name = "Infernal Calling" @@ -365,8 +383,10 @@ class Infestation(Spell): direction: 1., north; 2, south; 3, east; or 4, west. This movement doesn't provoke opportunity attacks, and if the direction rolled is blocked, the target doesn't move. + The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6). + """ name = "Infestation" @@ -388,6 +408,7 @@ class InflictWounds(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st. + """ name = "Inflict Wounds" @@ -416,6 +437,7 @@ class InsectPlague(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the damage increases by 1d10 for each slot level above 5th. + """ name = "Insect Plague" @@ -434,15 +456,17 @@ class InvestitureOfFlame(Spell): """Flames race across your body, shedding bright light in a 30-foot radius and dim light for an additional 30 feet for the spell's duration. The flames don't harm you. Until the spell ends, you gain the following benefits: + - You are immune to - fire damage and have resistance to cold damage. + fire damage and have resistance to cold damage. - Any creature that moves within - 5 feet of you for the first time on a turn or ends its turn there takes 1d10 - fire damage. + 5 feet of you for the first time on a turn or ends its turn there takes 1d10 + fire damage. - You can use your action to create a line of fire 15 feet long and - 5 feet wide extending from you in a direc- tion you choose. Each creature in - the line must make a Dexterity saving throw. A creature takes 4d8 fire damage on - a failed save, or half as much damage on a successful one. + 5 feet wide extending from you in a direction you choose. Each creature in + the line must make a Dexterity saving throw. A creature takes 4d8 fire damage on + a failed save, or half as much damage on a successful one. + """ name = "Investiture Of Flame" @@ -524,17 +548,19 @@ class InvestitureOfStone(Spell): class InvestitureOfWind(Spell): """Until the spell ends, wind whirls around you, and you gain the following benefits: - - Ranged weapon attacks made against you have disad- vantage on the - attack roll. + + - Ranged weapon attacks made against you have disadvantage on the + attack roll. - You gain a flying speed of 60 feet. If you are still flying when - the spell ends, you fall, unless you can some- how prevent it. + the spell ends, you fall, unless you can somehow prevent it. - You can use - your action to create a 15-foot cube of swirling wind centered on a point you - can see within 60 feet of you. Each creature in that area must make a - Constitution saving throw. A creature takes 2d10 bludgeoning damage on a failed - save, or half as much damage on a successful one. If a Large or smaller creature - fails the save, that creature is also pushed up to 10 feet away from the center - of the cube. + your action to create a 15-foot cube of swirling wind centered on a point you + can see within 60 feet of you. Each creature in that area must make a + Constitution saving throw. A creature takes 2d10 bludgeoning damage on a failed + save, or half as much damage on a successful one. If a Large or smaller creature + fails the save, that creature is also pushed up to 10 feet away from the center + of the cube. + """ name = "Investiture Of Wind" @@ -554,9 +580,10 @@ class Invisibility(Spell): is wearing or carrying is invisible as long as it is on the target's person. The spell ends for a target that attacks or casts a spell. - At Higher Levels: + **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 = "Invisibility" diff --git a/dungeonsheets/spells/spells_j.py b/dungeonsheets/spells/spells_j.py index d86d4d9e..1819d0b5 100644 --- a/dungeonsheets/spells/spells_j.py +++ b/dungeonsheets/spells/spells_j.py @@ -4,6 +4,7 @@ class Jump(Spell): """You touch a creature. The creature's jump distance is tripled until the spell ends. + """ name = "Jump" diff --git a/dungeonsheets/spells/spells_k.py b/dungeonsheets/spells/spells_k.py index 54c93721..d2567e7b 100644 --- a/dungeonsheets/spells/spells_k.py +++ b/dungeonsheets/spells/spells_k.py @@ -17,6 +17,7 @@ class Knock(Spell): When you cast the spell, a loud knock, audible from as far away as 300 feet, emanates from the target object. + """ name = "Knock" diff --git a/dungeonsheets/spells/spells_l.py b/dungeonsheets/spells/spells_l.py index 5e0dd957..44715c29 100644 --- a/dungeonsheets/spells/spells_l.py +++ b/dungeonsheets/spells/spells_l.py @@ -16,6 +16,7 @@ class LegendLore(Spell): hand of the evil ones. Only a true Child of Stone, lover and beloved of Moradin, may awaken the true powers of the axe, and only with the sacred word Rudnogg on the lips. + """ name = "Legend Lore" @@ -51,6 +52,7 @@ class LeomundsSecretChest(Spell): smaller replica chest is destroyed, or if you choose to end the spell as an action. If the spell ends and the larger chest is on the Ethereal Plane, it is irretrievably lost. + """ name = "Leomunds Secret Chest" @@ -85,6 +87,7 @@ class LeomundsTinyHut(Spell): Until the spell ends, you can command the interior to become dimly lit or dark. The dome is opaque from the outside, of any color you choose, but it is transparent from the inside. + """ name = "Leomunds Tiny Hut" @@ -102,6 +105,7 @@ class LeomundsTinyHut(Spell): class LesserRestoration(Spell): """You touch a creature and can end either one disease or one condition afflicting it. The condition can be blinded, deafened, paralyzed, or poisoned. + """ name = "Lesser Restoration" @@ -132,6 +136,7 @@ class Levitate(Spell): When the spell ends, the target floats gently to the ground if it is still aloft. + """ name = "Levitate" @@ -157,6 +162,7 @@ class LifeTransference(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. + """ name = "Life Transference" @@ -181,6 +187,7 @@ class Light(Spell): If you target an object held or worn by a hostile creature, that creature must succeed on a Dexterity saving throw to avoid the spell. + """ name = "Light" @@ -209,10 +216,11 @@ class LightningArrow(Spell): The piece of ammunition or weapon then returns to its normal form. - At - Higher Levels: When you cast this spell using a spell slot of 4th level or + **At + Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. + """ name = "Lightning Arrow" @@ -239,6 +247,7 @@ class LightningBolt(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 3rd. + """ name = "Lightning Bolt" @@ -263,6 +272,7 @@ class LightningLure(Spell): **At Higher Levels:** This spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8). + """ name = "Lightning Lure" @@ -281,6 +291,7 @@ class LocateAnimalsOrPlants(Spell): """Describe or name a specific kind of beast or plant. Concentrating on the voice of nature in your surroundings, you learn the direction and distance to the closest creature or plant of that kind within 5 miles, if any are present. + """ name = "Locate Animals Or Plants" @@ -310,6 +321,7 @@ class LocateCreature(Spell): This spell can't locate a creature if running water at least 10 feet wide blocks a direct path between you and the creature. + """ name = "Locate Creature" @@ -337,6 +349,7 @@ class LocateObject(Spell): This spell can't locate an object if any thickness of lead, even a thin sheet, blocks a direct path between you and the object. + """ name = "Locate Object" @@ -358,6 +371,7 @@ class Longstrider(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, you can target one additional creature for each slot level above 1st. + """ name = "Longstrider" diff --git a/dungeonsheets/spells/spells_m.py b/dungeonsheets/spells/spells_m.py index 011a617d..efac699b 100644 --- a/dungeonsheets/spells/spells_m.py +++ b/dungeonsheets/spells/spells_m.py @@ -10,6 +10,7 @@ class MaddeningDarkness(Spell): Whenever a creature starts its turn in the sphere, it must make a Wisdom saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one. + """ name = "Maddening Darkness" @@ -25,13 +26,14 @@ class MaddeningDarkness(Spell): class Maelstrom(Spell): - """(paper or leaf in the shape of a funnel) + """ A mass of 5-foot-deep water appears and swirls in a 30-foot radius centered on a point you can see within range. The point must be on ground or in a body of water. Until the spell ends, that area is difficult terrain, and any creature that starts its turn there must succeed on a Strength saving throw or take 6d6 bludgeoning damage and be pulled 10 feet toward the center. + """ name = "Maelstrom" @@ -39,7 +41,7 @@ class Maelstrom(Spell): casting_time = "1 action" casting_range = "120 feet" components = ("V", "S", "M") - materials = "" + materials = "Paper or leaf in the shape of a funnel" duration = "Concentration, up to 1 minute" ritual = False magic_school = "Evocation" @@ -51,6 +53,7 @@ class MageArmor(Spell): 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" @@ -79,6 +82,7 @@ class MageHand(Spell): The hand can't attack, activate magical items, or carry more than 10 pounds. + """ name = "Mage Hand" @@ -179,6 +183,7 @@ class features. that creature dies. When the spell ends, the container is destroyed. + """ name = "Magic Jar" @@ -243,6 +248,7 @@ class MagicMouth(Spell): that occur within 30 feet of the object. For example, you could instruct the mouth to speak when any creature moves within 30 feet of the object or when a silver bell rings within 30 feet of it. + """ name = "Magic Mouth" @@ -270,6 +276,7 @@ class MagicStone(Spell): hits or misses, the spell then ends on the stone. If you cast this spell again, the spell ends on any pebbles still affected by your previous casting. + """ name = "Magic Stone" @@ -288,11 +295,12 @@ class MagicWeapon(Spell): """You touch a nonmagical weapon. Until the spell ends, that weapon becomes a magic weapon with a +1 bonus to attack rolls and damage rolls. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the bonus increases to +2. When you use a spell slot of 6th level or higher, the bonus increases to +3. + """ name = "Magic Weapon" @@ -336,6 +344,7 @@ class MajorImage(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the spell lasts until dispelled, without requiring your concentration. + """ name = "Major Image" @@ -357,9 +366,10 @@ class MassCureWounds(Spell): Each target regains hit points equal to 3d8 + your spellcasting ability modifier. This spell has no effect on undead or constructs. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a spell slot of 6th level or higher, the healing increases by 1d8 for each slot level above 5th. + """ name = "Mass Cure Wounds" @@ -380,6 +390,7 @@ class MassHeal(Spell): creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. + """ name = "Mass Heal" @@ -399,9 +410,10 @@ class MassHealingWord(Spell): you can see within range regain hit points equal to 1d4 + your spellcasting ability modifier. This spell has no effect on undead or constructs. - At Higher - Levels: When you cast this spell using a spell slot of 4th level or higher, the + **At Higher + Levels:** When you cast this spell using a spell slot of 4th level or higher, the healing increases by 1d4 for each slot level above 3rd. + """ name = "Mass Healing Word" @@ -428,17 +440,20 @@ class MassPolymorph(Spell): game statistics, including mental ability scores, are replaced by the statistics of the chosen beast, but the target retains its hit points, alignment, and personality. + Each target gains a number of temporary hit points equal to the hit points of its new form. These temporary hit points can't be replaced by temporary hit points from another source. A target reverts to its normal form when it has no more temporary hit points or it dies. If the spell ends before then, the creature loses all its temporary hit points and reverts to its normal form. + The creature is limited in the actions it can perform by the nature of its new form. It can't speak, cast spells, or do anything else that requires hands or speech. The target's gear melds into the new form. The target can't activate, use, wield, or otherwise benefit from any of its equipment. + """ name = "Mass Polymorph" @@ -478,12 +493,13 @@ class MassSuggestion(Spell): If you or any of your companions damage a creature affected by this spell, the spell ends for that creature. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a 7th-level spell slot, the duration is 10 days. When you use an 8th-level spell slot, the duration is 30 days. When you use a 9th-level spell slot, the duration is a year and a day. + """ name = "Mass Suggestion" @@ -511,12 +527,15 @@ class MaximiliansEarthenGrasp(Spell): crush the restrained target, who must make a Strength saving throw. It takes 2d6 bludgeoning damage on a failed save, or half as much damage on a successful one. + To break out, the restrained target can make a Strength check against your spell save DC. On a success, the target escapes and is no longer restrained by the hand. + As an action, you can cause the hand to reach for a different creature or to move to a different unoccupied space within range. The hand releases a restrained target if you do either. + """ name = "Maximilians Earthen Grasp" @@ -543,6 +562,7 @@ class Maze(Spell): When the spell ends, the target reappears in the space it left or, if that space is occupied, in the nearest unoccupied space. + """ name = "Maze" @@ -578,6 +598,7 @@ class MeldIntoStone(Spell): transmutation into a different substance) expels you and deals 50 bludgeoning damage to you. If expelled, you fall prone in an unoccupied space closest to where you first entered. + """ name = "Meld Into Stone" @@ -600,9 +621,10 @@ class MelfsAcidArrow(Spell): next turn. On a miss, the arrow splashes the target with acid for half as much of the initial damage and no damage at the end of its next turn. - At Higher - Levels: When you cast this spell using a spell slot of 3rd level or higher, the + **At Higher + Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage (both initial and later) increases by 1d4 for each slot level above 2nd. + """ name = "Melfs Acid Arrow" @@ -618,7 +640,7 @@ class MelfsAcidArrow(Spell): class MelfsMinuteMeteors(Spell): - """(niter, sulfur, and pine tar formed into a bead) + """ You create six tiny meteors in your space. They float in the air and orbit you for the spell's duration. When you cast the spell-and as a bonus action on each of your turns thereafter-you @@ -628,9 +650,11 @@ class MelfsMinuteMeteors(Spell): feet of the point where the meteor explodes must make a Dexterity saving throw. A creature takes 2d6 fire damage on a failed save, or half as much damage on a successful one. - At Higher Levels. When you cast this spell using a spell slot of + + **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the number of meteors created increases by two for each slot level above 3rd. + """ name = "Melfs Minute Meteors" @@ -638,7 +662,7 @@ class MelfsMinuteMeteors(Spell): casting_time = "1 action" casting_range = "Self" components = ("V", "S", "M") - materials = "" + materials = "Niter, sulfur, and pine tar formed into a bead" duration = "Concentration, up to 10 minutes" ritual = False magic_school = "Evocation" @@ -647,13 +671,14 @@ class MelfsMinuteMeteors(Spell): class Mending(Spell): """This spell repairs a single break or tear in an object you touch, such as broken - chain link, two halves of a broken key, a torn cloack, or a leaking wineskin. + chain link, two halves of a broken key, a torn cloak, or a leaking wineskin. As long as the break or tear is no larger than 1 foot in any dimension, you mend it, leaving no trace of the former damage. This spell can physically repair a magic item or construct, but the spell can't restore magic to such an object. + """ name = "Mending" @@ -681,6 +706,7 @@ class MentalPrison(Spell): spell's duration. If the target is moved out of the illusion, makes a melee attack through it, or reaches any part of its body through it, the target takes 10d10 psychic damage, and the spell ends. + """ name = "Mental Prison" @@ -706,6 +732,7 @@ class Message(Spell): foot of stone, 1 inch of common metal, a thin sheet of lead, or 3 feet of wood blocks the spell. The spell doesn't have to follow a straight line and can travel freely around corners or through openings. + """ name = "Message" @@ -726,11 +753,12 @@ class MeteorSwarm(Spell): Each creature in a 40-foot-radius sphere centered on each point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a - failed save, or half as much damage on a sucessful one. A creature in the area + failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. The spell damages objects in the area and ignites flammable objects that aren't being worn or carried. + """ name = "Meteor Swarm" @@ -750,6 +778,7 @@ class MightyFortress(Spell): can see within range. The area is 120 feet on each side, and it must not have any buildings or other structures on it. Any creatures in the area are harmlessly lifted up as the fortress rises. + The fortress has four turrets with square bases, each one 20 feet on a side and 30 feet tall, with one turret on each corner. The turrets are connected to each other by stone walls that are @@ -757,6 +786,7 @@ class MightyFortress(Spell): composed of panels that are 10 feet wide and 20 feet tall. Each panel is contiguous with two other panels or one other panel and a turret. You can place up to four stone doors in the fortress's outer wall. + A small keep stands inside the enclosed area. The keep has a square base that is 50 feet on each side, and it has three floors with 10-foot-high ceilings. Each of the floors can be @@ -767,21 +797,26 @@ class MightyFortress(Spell): contains sufficient food to serve a nine-course banquet for up to 100 people each day. Furnishings, food, and other objects created by this spell crumble to dust if removed from the fortress. + A staff of one hundred invisible servants - obeys anycommand given to them by creatures you designate when you cast the + obeys any command given to them by creatures you designate when you cast the spell. Each servant functions as if created by the unseen servant spell. + The walls, turrets, and keep are all made of stone that can be damaged. Each - 10-foot-bya10-foot section of stone has AC 15 and 30 hit points per inch of + 10-foot-by-10-foot section of stone has AC 15 and 30 hit points per inch of thickness. It is immune to poison and psychic damage. Reducing a section of stone to 0 hit points destroys it and might cause connected sections to buckle and collapse at the DM's discretion. + After 7 days or when you cast this spell somewhere else, the fortress harmlessly crumbles and sinks back into the ground, leaving any creatures that were inside it safely on the ground. + Casting this spell on the same spot once every 7 days for a year makes the fortress permanent. + """ name = "Mighty Fortress" @@ -802,6 +837,7 @@ class MindBlank(Spell): divination spells, and the charmed condition. The spell even foils wish spells and spells or effects of similar power used to affect the target's mind or to gain information about the target. + """ name = "Mind Blank" @@ -824,6 +860,7 @@ class MindSliver(Spell): **At Higher Levels:** This spell’s damage increases by 1d6 when you reach certain levels: 5th level (2d6), 11th level (3d6), and 17th level (4d6). + """ name = "Mind Sliver" @@ -850,6 +887,7 @@ class MindSpike(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. + """ name = "Mind Spike" @@ -885,6 +923,7 @@ class MinorIllusion(Spell): creature can determine that it is an illusion with a successful Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the illusion becomes faint to the creature. + """ name = "Minor Illusion" @@ -922,6 +961,7 @@ class MirageArcane(Spell): to the terrain's true form however, all other elements of the illusion remain, so while the creature is aware of the illusion's presence, the creature can still physically interact with the illusion. + """ name = "Mirage Arcane" @@ -951,7 +991,6 @@ class MirrorImage(Spell): or higher to change the attack's target to a duplicate. With two duplicates, you must roll an 8 or higher. With one duplicate, you must roll an 11 or higher. - A duplicate's AC equals 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends @@ -960,6 +999,7 @@ class MirrorImage(Spell): A creature is unaffected by this spell if it can't see, if it relies on senses other than sight, such as blindsight, or if it can perceive illusions as false, as with truesight. + """ name = "Mirror Image" @@ -988,6 +1028,7 @@ class Mislead(Spell): action, you can switch from using its senses to using your own, or back again. While you are using its senses, you are blinded and deafened in regard to your own surroundings. + """ name = "Mislead" @@ -1005,6 +1046,7 @@ class Mislead(Spell): class MistyStep(Spell): """Briefly surrounded by silvery mist, you teleport up to 30 feet to an unoccupied space that you can see. + """ name = "Misty Step" @@ -1042,7 +1084,6 @@ class ModifyMemory(Spell): before you have finished describing the modified memories, the creature's memory isn't altered. Otherwise, the modified memories take hold when the spell ends. - A modified memory doesn't necessarily affect how a creature behaves, particularly if the memory contradicts the creature's natural inclinations, alignment, or beliefs. An illogical modified memory, such as implanting a memory @@ -1058,6 +1099,7 @@ class ModifyMemory(Spell): target's memories of an event that took place up to 7 days ago (6th level), 30 days ago (7th level), 1 year ago (8th level), or any time in the creature's past (9th level). + """ name = "Modify Memory" @@ -1075,17 +1117,20 @@ class ModifyMemory(Spell): class MoldEarth(Spell): """You choose a portion of dirt or stone that you can see within range and that fits within a 5-foot cube. You manipulate it in one of the following ways: + - If - you target an area of loose earth, you can instantaneously excavate it, move it - along the ground, and deposit it up to 5 feet away. This movement doesn't have - enough force to cause damage. + you target an area of loose earth, you can instantaneously excavate it, move it + along the ground, and deposit it up to 5 feet away. This movement doesn't have + enough force to cause damage. - You cause shapes, colors, or both to appear on - the dirt or stone, spelling out words, creating images, or shaping patterns. The - changes last for 1 hour. + the dirt or stone, spelling out words, creating images, or shaping patterns. The + changes last for 1 hour. - If the dirt or stone you target is on the ground, - you cause it to become difficult terrain. Alternatively, you can cause the - ground to become normal terrain if it is already difficult terrain. This change - lasts for 1 hour. If you cast this spell multiple times, you can have no more + you cause it to become difficult terrain. Alternatively, you can cause the + ground to become normal terrain if it is already difficult terrain. This change + lasts for 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. """ @@ -1120,7 +1165,7 @@ class Moonbeam(Spell): 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 + **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. @@ -1156,6 +1201,7 @@ class MordenkainensFaithfulHound(Spell): feet of it that is hostile to you. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. + """ name = "Mordenkainens Faithful Hound" @@ -1174,7 +1220,7 @@ class MordenkainensMagnificentMansion(Spell): """You conjure an extradimensional dwelling in range that lasts for the duration. You choose where its one entrance is located. The entrance shimmers faintly and - is 5 feet w ide and 10 feet tall. You and any creature you designate when you + is 5 feet wide and 10 feet tall. You and any creature you designate when you cast the spell can enter the extradimensional dwelling as long as the portal remains open. You can open or close the portal if you are within 30 feet of it. While closed, the portal is invisible. @@ -1185,7 +1231,7 @@ class MordenkainensMagnificentMansion(Spell): You can create any floor plan you like, but the space can't exceed 50 cubes, each cube being 10 feet on each side. The place is furnished and decorated as you - choose. It contains sufficient food to serve a ninecourse banquet for up to 100 + choose. It contains sufficient food to serve a nine-course banquet for up to 100 people. A staff of 100 near-transparent servants attends all who enter. You decide the visual appearance of these servants and their attire. They are completely obedient to your orders. Each servant can perform any task a normal @@ -1196,6 +1242,7 @@ class MordenkainensMagnificentMansion(Spell): created by this spell dissipate into smoke if removed from the mansion. When the spell ends, any creatures inside the extradimensional space are expelled into the open spaces nearest to the entrance. + """ name = "Mordenkainens Magnificent Mansion" @@ -1222,18 +1269,18 @@ class MordenkainensPrivateSanctum(Spell): When you cast the spell, you decide what sort of security the spell provides, choosing any or all of the following properties: - * Sound can't pass through the barrier at the edge of the - warded area. - * The barrier of the warded area appears dark and foggy, preventing - vision (including darkvision) through it. - * Sensors created by divination - spells can't appear inside the protected area or pass through the barrier at its - perimeter. - * Creatures in the area can't be targeted by divination spells. - * - Nothing can teleport into or out of the warded area. - * Planar travel is blocked - within the warded area. + + - Sound can't pass through the barrier at the edge of the + warded area. + - The barrier of the warded area appears dark and foggy, preventing + vision (including darkvision) through it. + - Sensors created by divination + spells can't appear inside the protected area or pass through the barrier at its + perimeter. + - Creatures in the area can't be targeted by divination spells. + - Nothing can teleport into or out of the warded area. + - Planar travel is blocked + within the warded area. Casting this spell on the same spot every day for a year makes this effect permanent. @@ -1242,6 +1289,7 @@ class MordenkainensPrivateSanctum(Spell): using a spell slot of 5th level or higher, you can increase the size of the cube by 100 feet for each slot level beyond 4th. Thus you could protect a cube that can be up to 200 feet on one side by using a spell slot of 5th level. + """ name = "Mordenkainens Private Sanctum" @@ -1268,6 +1316,7 @@ class MordenkainensSword(Spell): 3d10 force damage. Until the spell ends, you can use a bonus action on each of your turns to move the sword up to 20 feet to a spot you can see and repeat this attack against the same target or a different one. + """ name = "Mordenkainens Sword" @@ -1310,6 +1359,7 @@ class MoveEarth(Spell): Similarly, this spell doesn't directly affect plant growth. The moved earth carries any plants along with it. + """ name = "Move Earth" diff --git a/dungeonsheets/spells/spells_n.py b/dungeonsheets/spells/spells_n.py index d012861b..00ac2192 100644 --- a/dungeonsheets/spells/spells_n.py +++ b/dungeonsheets/spells/spells_n.py @@ -10,6 +10,7 @@ class NegativeEnergyFlood(Spell): it. Statistics for the zombie are in the Monster Manual. If you target an undead with this spell, the target doesn't make a saving throw. Instead, roll 5d12. The target gains half the total as temporary hit points. + """ name = "Negative Energy Flood" @@ -30,6 +31,7 @@ class Nondetection(Spell): target can be a willing creature or a place or an object no larger than 10 feet in any dimension. The target can't be targeted by any divination magic or perceived through magical scrying sensors. + """ name = "Nondetection" @@ -59,20 +61,21 @@ class NystulsMagicAura(Spell): day for 30 days, placing the same effect on it each time, the illusion lasts until it is dispelled. - False Aura - You change the way the target appears to - spells and magical effects, such as detect magic, that detect magical auras. You - can make a nonmagical object appear magical, a magical object appear - nonmagical, or change the object's magical aura so that it appears to belong to - a specific school of magic that you choose. When you use this effect on an - object, you can make the false magic apparent to any creature that handles the - item. + False Aura. + You change the way the target appears to + spells and magical effects, such as detect magic, that detect magical auras. You + can make a nonmagical object appear magical, a magical object appear + nonmagical, or change the object's magical aura so that it appears to belong to + a specific school of magic that you choose. When you use this effect on an + object, you can make the false magic apparent to any creature that handles the + item. + + Mask. + You change the way the target appears to spells and magical effects + that detect creature types, such as a paladin's Divine Sense or the trigger of a + symbol spell. You choose a creature type and other spells and magical effects + treat the target as if it were a creature of that type or of that alignment. - Mask - You change the way the target appears to spells and magical effects - that detect creature types, such as a paladin's Divine Sense or the trigger of a - sym bol spell. You choose a creature type and other spells and magical effects - treat the target as if it were a creature of that type or of that alignment. """ name = "Nystuls Magic Aura" diff --git a/dungeonsheets/spells/spells_o.py b/dungeonsheets/spells/spells_o.py index 07919d9b..c5317708 100644 --- a/dungeonsheets/spells/spells_o.py +++ b/dungeonsheets/spells/spells_o.py @@ -24,9 +24,10 @@ class OtilukesFreezingSphere(Spell): normal casting of the spell. You can also set the globe down without shattering it. After 1 minute, if the globe hasn't already shattered, it explodes. - At - Higher Levels: When you cast this spell using a spell slot of 7th level or + **At + Higher Levels:** When you cast this spell using a spell slot of 7th level or higher, the damage increases by 1d6 for each slot level above 6th + """ name = "Otilukes Freezing Sphere" @@ -61,6 +62,7 @@ class OtilukesResilientSphere(Spell): A disintegrate spell targeting the globe destroys it without harming anything inside it. + """ name = "Otilukes Resilient Sphere" @@ -89,6 +91,7 @@ class OttosIrresistibleDance(Spell): affected by this spell, other creatures have advantage on attack rolls against it. As an action, a dancing creature makes a Wisdom saving throw to regain control of itself. On a successful save, the spell ends. + """ name = "Ottos Irresistible Dance" diff --git a/dungeonsheets/spells/spells_p.py b/dungeonsheets/spells/spells_p.py index 45c69ae8..01a016c5 100644 --- a/dungeonsheets/spells/spells_p.py +++ b/dungeonsheets/spells/spells_p.py @@ -8,6 +8,7 @@ class PassWithoutTrace(Spell): you (including you) has a +10 bonus to Dexterity (Stealth) checks and can't be tracked except by magical means. A creature that receives this bonus leaves behind no tracks or other traces of its passage. + """ name = "Pass Without Trace" @@ -32,6 +33,7 @@ class Passwall(Spell): When the opening disappears, any creatures or objects still in the passage created by the spell are safely ejected to an unoccupied space nearest to the surface on which you cast the spell. + """ name = "Passwall" @@ -125,7 +127,7 @@ class PhantasmalKiller(Spell): class PhantomSteed(Spell): - """A Large quasi-real, horselike creature appears on the ground in an unoccupied + """A Large quasi-real, horse-like creature appears on the ground in an unoccupied space of your choice within range. You decide the creature's appearance, but it is equipped with a saddle, bit, and bridle. Any of the equipment created by the spell vanishes in a puff of smoke if it is carried more than 10 feet away from @@ -137,6 +139,7 @@ class PhantomSteed(Spell): the spell ends, the steed gradually fades, giving the rider 1 minute to dismount. The spell ends if you use an action to dismiss it or if the steed takes any damage. + """ name = "Phantom Steed" @@ -176,7 +179,7 @@ class PlanarAlly(Spell): As a rule of thumb, a task that can be measured in minutes requires a payment worth 100 gp per minute. A task measured in hours requires - 1,000 gp per hour. And a task m easured in days (up to 10 days) requires 10,000 + 1,000 gp per hour. And a task measured in days (up to 10 days) requires 10,000 gp per day. The DM can adjust these payments based on the circumstances under which you cast the spell. If the task is aligned with the creature's ethos, the payment might be halved or even waived. Nonhazardous tasks typically require @@ -189,9 +192,9 @@ class PlanarAlly(Spell): appropriate to the task and if possible. If you are unable to agree on a price for the creature's service, the creature immediately returns to its home plane. - A creature enlisted to join your group counts as a member of it, receiving a full share of experience points awarded. + """ name = "Planar Ally" @@ -235,6 +238,7 @@ class PlanarBinding(Spell): 180 days with an 8th-level slot, 1 year and 1 day with a 9th-level spell slot. + """ name = "Planar Binding" @@ -254,7 +258,7 @@ class PlaneShift(Spell): to a different plane of existence. You can specify a target destination in general terms, such as the City of Brass on the Elemental Plane of Fire or the palace of Dispater on the second level of the Nine Hells, and you appear in or - near that destination. If you are trying to reac the City of Brass, for example, + near that destination. If you are trying to reach the City of Brass, for example, you might arrive in its Street of Steel, before its Gate of Ashes, or looking at the city from across the Sea of Fire, at the DM's discretion. @@ -270,6 +274,7 @@ class PlaneShift(Spell): Charisma saving throw. If the creature fails the save, it is transported to a random location on the plane of existence you specify. A creature so transported must find its own way back to your current plane of existence. + """ name = "Plane Shift" @@ -291,7 +296,6 @@ class PlantGrowth(Spell): """This spell channels vitality into plants within a specific area. There are two possible uses for the spell, granting either immediate or long-term benefits. - If you cast this spell using 1 action, choose a point within range. All normal plants in a 100-foot radius centered on that point become thick and overgrown. A creature moving through the area must spend 4 feet of movement for every 1 foot @@ -304,6 +308,7 @@ class PlantGrowth(Spell): land. All plants in a half-mile radius centered on a point within range become enriched for 1 year. The plants yield twice the normal amount of food when harvested. + """ name = "Plant Growth" @@ -326,6 +331,7 @@ class PoisonSpray(Spell): **At Higher Levels:** This spell's damage increases by 1d12 when you reach 5th level (2d12), 11th level (3d12), 17th level (4d12). + """ name = "Poison Spray" @@ -359,7 +365,6 @@ class Polymorph(Spell): damage carries over to its normal form. As long as the excess damage doesn't reduce the creature's normal form to 0 hit points, it isn't knocked unconscious. - The creature is limited in the actions it can perform by the nature of its new form, and it can't speak, cast spells, or take any other action that requires hands or speech. @@ -367,6 +372,7 @@ class Polymorph(Spell): The target's gear melds into the new form. The creature can't activate, use, wield, or otherwise benefit from any of its equipment. This spell can't affect a target that has 0 hit points. + """ name = "Polymorph" @@ -386,6 +392,7 @@ class PowerWordHeal(Spell): all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. + """ name = "Power Word Heal" @@ -404,6 +411,7 @@ class PowerWordKill(Spell): """You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you chose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. + """ name = "Power Word Kill" @@ -423,15 +431,18 @@ class PowerWordPain(Spell): creature you can see within range. If the target has 100 hit points or fewer, it is subject to crippling pain. Otherwise, the spell has no effect on it. A target is also unaffected if it is immune to being charmed. + While the target is affected by crippling pain, any speed it has can be no higher than 10 feet. The target also has disadvantage on attack rolls, ability checks, and saving throws, other than Constitution saving throws. Finally, if the target tries to cast a spell, it must first succeed on a Constitution saving throw, or the casting fails and the spell is wasted. + A target suffering this pain can make a Constitution saving throw at the end of each of its turns. On a successful save, the pain ends. + """ name = "Power Word Pain" @@ -452,6 +463,7 @@ class PowerWordStun(Spell): fewer, it is stunned. Otherwise, the spell has no effect. The stunned target must make a Constitution saving throw at the end of each of its turns. On a successful save, this stunning effect ends. + """ name = "Power Word Stun" @@ -474,6 +486,7 @@ class PrayerOfHealing(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the healing increases by 1d8 for each slot level above 2nd. + """ name = "Prayer Of Healing" @@ -505,6 +518,7 @@ class Prestidigitation(Spell): If you cast this spell multiple times, you can have up to three of its non-instantaneous effects active at a time, and you can dismiss such an effect as an action. + """ name = "Prestidigitation" @@ -526,6 +540,7 @@ class PrimalSavagery(Spell): make the attack, your teeth or fingernails return to normal. The spell's damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10). + """ name = "Primal Savagery" @@ -548,6 +563,7 @@ class PrimordialWard(Spell): of damage, including against the triggering damage. If you do so, the resistances end, and you have the immunity until the end of your next turn, at which time the spell ends. + """ name = "Primordial Ward" @@ -568,40 +584,48 @@ class PrismaticSpray(Spell): must make a Dexterity saving throw. For each target, roll a d8 to determine which color ray affects it. - 1. Red. The target takes 10d6 fire damage on a - failed save, or half as much damage on a successful one. + #. Red. + The target takes 10d6 fire damage on a + failed save, or half as much damage on a successful one. + + #. Orange. + The target + takes 10d6 acid damage on a failed save, or half as much damage on a successful + one. + + #. Yellow. + The target takes 10d6 lightning damage on a failed save, or + half as much damage on a successful one. + + #. Green. + The target takes 10d6 poison + damage on a failed save, or half as much damage on a successful one. + + #. Blue. + The target takes 10d6 cold damage on a failed save, or half as much damage on a + successful one. + + #. Indigo. + On a failed save, the target is restrained. It must + then make a Constitution saving throw at the end of each of its turns. If it + successfully saves three times, the spell ends. If it fails its save three + times, it permanently turns to stone and is subjected to the petrified + condition. The successes and failures don't need to be consecutive; keep track + of both until the target collects three of a kind. + + #. Violet. + On a failed save, + the target is blinded. It must then make a Wisdom saving throw at the start of + your next turn. A successful save ends the blindness. If it fails that save, the + creature is transported to another plane of existence of the DM's choosing and + is no longer blinded. (Typically, a creature that is on a plane that isn't its + home plane is banished home, while other creatures are usually cast into the + Astral or Ethereal planes.) + + #. Special. + The target is struck by two rays. Roll + twice more, rerolling any 8. - 2. Orange. The target - takes 10d6 acid damage on a failed save, or half as much damage on a successful - one. - - 3. Yellow. The target takes 10d6 lightning damage on a failed save, or - half as much damage on a successful one. - - 4. Green. The target takes 10d6 poison - damage on a failed save, or half as much damage on a successful one. - - 5. Blue. - The target takes 10d6 cold damage on a failed save, or half as much damage on a - successful one. - - 6. Indigo. On a failed save, the target is restrained. It must - then make a Constitution saving throw at the end of each of its turns. If it - successfully saves three times, the spell ends. If it fails its save three - times, it permanently turns to stone and is subjected to the petrified - condition. The successes and failures don't need to be consecutive; keep track - of both until the target collects three of a kind. - - 7. Violet. On a failed save, - the target is blinded. It must then make a Wisdom saving throw at the start of - your next turn. A successful save ends the blindness. If it fails that save, the - creature is transported to another plane of existence of the DM's choosing and - is no longer blinded. (Typically, a creature that is on a plane that isn't its - home plane is banished home, while other creatures are usually cast into the - Astral or Ethereal planes.) - - 8. Special. The target is struck by two rays. Roll - twice more, rerolling any 8. """ name = "Prismatic Spray" @@ -647,49 +671,56 @@ class PrismaticWall(Spell): cancellation destroys a prismatic wall, but an antimagic field has no effect on it. - 1. Red. The creature takes 10d6 fire damage on a failed save, or - half as much damage on a successful one. While this layer is in - place, nonmagical ranged attacks can't pass through the wall. The - layer can be destroyed by dealing at least 25 cold damage to it. - - 2. Orange. The creature takes 10d6 acid damage on a failed save, - or half as much damage on a successful one. While this layer is in - place, magical ranged attacks can't pass through the wall. The - layer is destroyed by a strong wind. - - 3. Yellow. The creature takes 10d6 lightning damage on a failed - save, or half as much damage on a successful one. This layer can - be destroyed by dealing at least 60 force damage to it. - - 4. Green. The creature takes 10d6 poison damage on a failed save, - or half as much damage on a successful one. A passwall spell, or - another spell of equal or greater level that can open a portal on - a solid surface, destroys this layer. - - 5. Blue. The creature takes 10d6 cold damage on a failed save, or - half as much damage on a successful one. This layer can be - destroyed by dealing at least 25 fire damage to it. - - 6. Indigo. On a failed save, the creature is restrained. It must - then make a Constitution saving throw at the end of each of its - turns. If it successfully saves three times, the spell ends. If it - fails its save three times, it permanently turns to stone and is - subjected to the petrified condition. The successes and failures - don't need to be consecutive; keep track of both until the - creature collects three of a kind. While this layer is in place, - spells can't be cast through the wall. The layer is destroyed by - bright light shed by a daylight spell or a similar spell of equal - or higher level. - - 7. Violet. On a failed save, the creature is blinded. It must then - make a Wisdom saving throw at the start of your next turn. A - successful save ends the blindness. If it fails that save, the - creature is transported to another plane of the DM's choosing and - is no longer blinded. (Typically, a creature that is on a plane - that isn't its home plane is banished home, while other creatures - are usually cast into the Astral or Ethereal planes.) This layer - is destroyed by a dispel magic spell or similar spell of equal or - higher level that can end spells and magical effects. + #. Red. + The creature takes 10d6 fire damage on a failed save, or + half as much damage on a successful one. While this layer is in + place, nonmagical ranged attacks can't pass through the wall. The + layer can be destroyed by dealing at least 25 cold damage to it. + + #. Orange. + The creature takes 10d6 acid damage on a failed save, + or half as much damage on a successful one. While this layer is in + place, magical ranged attacks can't pass through the wall. The + layer is destroyed by a strong wind. + + #. Yellow. + The creature takes 10d6 lightning damage on a failed + save, or half as much damage on a successful one. This layer can + be destroyed by dealing at least 60 force damage to it. + + #. Green. + The creature takes 10d6 poison damage on a failed save, + or half as much damage on a successful one. A passwall spell, or + another spell of equal or greater level that can open a portal on + a solid surface, destroys this layer. + + #. Blue. + The creature takes 10d6 cold damage on a failed save, or + half as much damage on a successful one. This layer can be + destroyed by dealing at least 25 fire damage to it. + + #. Indigo. + On a failed save, the creature is restrained. It must + then make a Constitution saving throw at the end of each of its + turns. If it successfully saves three times, the spell ends. If it + fails its save three times, it permanently turns to stone and is + subjected to the petrified condition. The successes and failures + don't need to be consecutive; keep track of both until the + creature collects three of a kind. While this layer is in place, + spells can't be cast through the wall. The layer is destroyed by + bright light shed by a daylight spell or a similar spell of equal + or higher level. + + #. Violet. + On a failed save, the creature is blinded. It must then + make a Wisdom saving throw at the start of your next turn. A + successful save ends the blindness. If it fails that save, the + creature is transported to another plane of the DM's choosing and + is no longer blinded. (Typically, a creature that is on a plane + that isn't its home plane is banished home, while other creatures + are usually cast into the Astral or Ethereal planes.) This layer + is destroyed by a dispel magic spell or similar spell of equal or + higher level that can end spells and magical effects. """ @@ -717,9 +748,10 @@ class ProduceFlame(Spell): action on a later turn, you can hurl the flame at a creature within 30 feet of you. Make a ranged spell attack. On a hit, the target takes 1d8 fire damage. - At - Higher Levels: This spell's damage increases by 1d8 when you reach 5th level + **At + Higher Levels:** This spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8). + """ name = "Produce Flame" @@ -760,6 +792,7 @@ class ProgrammedIllusion(Spell): (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through the image, and any noise it makes sounds hollow to the creature. + """ name = "Programmed Illusion" @@ -781,7 +814,6 @@ class ProjectImage(Spell): intervening obstacles. The illusion looks and sounds like you but is intangible. If the illusion takes any damage, it disappears, and the spell ends. - You can use your action to move this illusion up to twice your speed, and make it gesture, speak, and behave in whatever way you choose. It mimics your mannerisms perfectly. @@ -791,13 +823,13 @@ class ProjectImage(Spell): using its senses to using your own, or back again. While you are using its senses, you are blinded and deafened in regard to your own surroundings. - Physical interaction with the image reveals it to be an illusion, because things can pass through it. A creature that uses its action to examine the image can determine that it is an illusion with a successful Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through the image, and any noise it makes sounds hollow to the creature. + """ name = "Project Image" @@ -815,6 +847,7 @@ class ProjectImage(Spell): class ProtectionFromEnergy(Spell): """For the duration, the willing creature you touch has resistance to one damage type of your choice: acid, cold, fire, lightning, or thunder. + """ name = "Protection From Energy" @@ -839,6 +872,7 @@ class ProtectionFromEvilAndGood(Spell): charmed, frightened, or possessed by them. If the target is already charmed, frightened, or possessed by such a creature, the target has advantage on any new saving throw against the relevant effect. + """ name = "Protection From Evil And Good" @@ -861,6 +895,7 @@ class ProtectionFromPoison(Spell): For the duration, the target has advantage on saving throws against being poisoned, and it has resistance to poison damage. + """ name = "Protection From Poison" @@ -879,13 +914,16 @@ class PsychicScream(Spell): """You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Creatures that have an Intelligence score of 2 or lower are unaffected. + Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned. On a successful save, a target takes half as much damage and isn't stunned. If a target is killed by this damage, its head explodes, assuming it has one. + A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. + """ name = "Psychic Scream" @@ -903,6 +941,7 @@ class PsychicScream(Spell): class PurifyFoodAndDrink(Spell): """All nonmagical food and drink within a 5-foot-radius sphere centered on a point of your choice within range is purified and rendered free of poison and disease. + """ name = "Purify Food And Drink" @@ -921,13 +960,18 @@ class Pyrotechnics(Spell): """Choose an area of nonmagical flame that you can see and that fits within a 5-foot cube within range. You can extinguish the fire in that area, and you create either fireworks or smoke when you do so. - Fireworks. The target explodes - with a dazzling display of colors. Each creature within 10 feet of the target - must succeed on a Constitution saving throw or become blinded until the end of - your next turn. - Smoke. Thick black smoke spreads out from the target in a - 20-foot radius, moving around corners. The area of the smoke is heavily - obscured. The smoke persists for 1 minute or until a strong wind disperses it. + + Fireworks. + The target explodes + with a dazzling display of colors. Each creature within 10 feet of the target + must succeed on a Constitution saving throw or become blinded until the end of + your next turn. + + Smoke. + Thick black smoke spreads out from the target in a + 20-foot radius, moving around corners. The area of the smoke is heavily + obscured. The smoke persists for 1 minute or until a strong wind disperses it. + """ name = "Pyrotechnics" diff --git a/dungeonsheets/spells/spells_r.py b/dungeonsheets/spells/spells_r.py index 78594c7c..74d6a6bb 100644 --- a/dungeonsheets/spells/spells_r.py +++ b/dungeonsheets/spells/spells_r.py @@ -22,6 +22,7 @@ class RaiseDead(Spell): -4 penalty to all attack rolls, saving throws, and ability checks. Every time the target finishes a long rest, the penalty is reduced by 1 until it disappears. + """ name = "Raise Dead" @@ -46,6 +47,7 @@ class RarysTelepathicBond(Spell): through the bond whether or not they have a common language. The communication is possible over any distance, though it can't extend to other planes of existence. + """ name = "Rarys Telepathic Bond" @@ -69,6 +71,7 @@ class RayOfEnfeeblement(Spell): At the end of each of the target's turns, it can make a Constitution saving throw against the spell. On a success, the spell ends. + """ name = "Ray Of Enfeeblement" @@ -88,9 +91,10 @@ class RayOfFrost(Spell): ranged spell attack against the target. On a hit, it takes 1d8 cold damage, and its speed is reduced by 10 feet until the start of your next turn. - At Higher - Levels: The spell's damage increases by 1d8 when you reach 5th level (2d8), 11th + **At Higher + Levels:** The spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8). + """ name = "Ray Of Frost" @@ -115,6 +119,7 @@ class RayOfSickness(Spell): **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" @@ -139,6 +144,7 @@ class Regenerate(Spell): target's severed body members (fingers, legs, tails, and so on), if any, are restored after 2 minutes. If you have the severed part and hold it to the stump, the spell instantaneously causes the limb to knit to the stump. + """ name = "Regenerate" @@ -164,29 +170,29 @@ class Reincarnate(Spell): DM rolls a d 100 and consults the following table to determine what form the creature takes when restored to life, or the DM chooses a form. - d100  Race - - 01-04 Dragonborn - 05-13 Dwarf, hill - 14-21 Dwarf, mountain - 22-25 Elf, dark - 26-34 - Elf, high - 35-42 Elf, wood - 43-46 Gnome, forest - 47-52 Gnome, rock - 53-56 Half-elf - - 57-60 Half-orc - 61-68 Halfling, lightfoot - 69-76 Halfling, stout - 77-96 Human - 97-00 - Tiefling + ======== =========================== + d100   Race + ======== =========================== + 01-04 Dragonborn + 05-13 Dwarf, hill + 14-21 Dwarf, mountain + 22-25 Elf, dark + 26-34 Elf, high + 35-42 Elf, wood + 43-46 Gnome, forest + 47-52 Gnome, rock + 53-56 Half-elf + 57-60 Half-orc + 61-68 Halfling, lightfoot + 69-76 Halfling, stout + 77-96 Human + 97-00 Tiefling + ======== =========================== The reincarnated creature recalls its former life and experiences. It retains the capabilities it had in its original form, except it exchanges its original race for the new one and changes its racial traits accordingly. + """ name = "Reincarnate" @@ -207,6 +213,7 @@ class RemoveCurse(Spell): """At your touch, all curses affecting one creature or object end. If the object is a cursed magic item, its curse remains, but the spell breaks its owner's attunement to the object so it can be removed or discarded. + """ name = "Remove Curse" @@ -225,6 +232,7 @@ class Resistance(Spell): """You touch one willing creature. Once before the spell ends, the target can roll a d4 and add the number rolled to one saving throw of its choice. It can roll the die before or after the saving throw. The spell then ends. + """ name = "Resistance" @@ -257,11 +265,11 @@ class Resurrection(Spell): penalty to all attack rolls, saving throws, and ability checks. Every time the target finishes a long rest, the penalty is reduced by 1 until it disappears. - Casting this spell to restore life to a creature that has been dead for one year or longer taxes you greatly. Until you finish a long rest, you can't cast spells again, and you have disadvantage on all attack rolls, ability checks, and saving throws. + """ name = "Resurrection" @@ -292,6 +300,7 @@ class ReverseGravity(Spell): At the end of the duration, affected objects and creatures fall back down. + """ name = "Reverse Gravity" @@ -310,6 +319,7 @@ class Revivify(Spell): """You touch a creature that has died within the last minute. That creature returns to life with 1 hit point. This spell can't return to life a creature that has died of old age, nor can it restore any missing body parts. + """ name = "Revivify" @@ -339,8 +349,8 @@ class RopeTrick(Spell): 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" diff --git a/dungeonsheets/spells/spells_s.py b/dungeonsheets/spells/spells_s.py index c9899aaa..1d63ffe0 100644 --- a/dungeonsheets/spells/spells_s.py +++ b/dungeonsheets/spells/spells_s.py @@ -9,6 +9,7 @@ class SacredFlame(Spell): **At Higher Levels:** The spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8). + """ name = "Sacred Flame" @@ -34,6 +35,7 @@ class Sanctuary(Spell): If the warded creature makes an attack or casts a spell that affects an enemy creature, this spell ends. + """ name = "Sanctuary" @@ -54,6 +56,7 @@ class Scatter(Spell): resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. + """ name = "Scatter" @@ -76,6 +79,7 @@ class ScorchingRay(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, you create one additional ray for each slot level above 2nd. + """ name = "Scorching Ray" @@ -92,23 +96,31 @@ class ScorchingRay(Spell): class Scrying(Spell): """You can see and hear a particular creature you choose that is on - the same plane of existence as you. The target must make a W isdom + the same plane of existence as you. The target must make a Wisdom saving throw, which is modified by how well you know the target 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** - - - 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** - - - Likeness or picture - -2 - - Possession or garment - -4 - - Body part, lock of hair, bit of nail, or the like - -10 + ========================================= ================= + 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 | + +========================================+================+ + | Likeness or picture | -2 | + +----------------------------------------+----------------+ + | Possession or garment | -4 | + +----------------------------------------+----------------+ + | Body part, lock of hair, bit of nail, | -10 | + | or the like | | + +----------------------------------------+----------------+ On a successful save, the target isn't affected, and you can't use this spell against it again for 24 hours. @@ -156,7 +168,7 @@ class SearingSmite(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, the initial extra damage dealt by the - attack increases by 1d6 for each slot + attack increases by 1d6 for each slot. """ @@ -199,9 +211,9 @@ class Seeming(Spell): appearance. An unwilling target can make a Charisma saving throw, and if it succeeds, it is unaffected by this spell. - The spell disguises physicial + The spell disguises physical 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. + each creature seem 1 foot shorter or taller and appear thin, fat, or in-between. 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 @@ -209,7 +221,7 @@ class Seeming(Spell): 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 + outfit, 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. @@ -218,6 +230,7 @@ class Seeming(Spell): 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" @@ -234,7 +247,7 @@ class Seeming(Spell): class Sending(Spell): """You send a short message of twenty-five words or less to a creature with you are - familiar. The creature hears the message in its mind, regonizes you as the + familiar. The creature hears the message in its mind, recognizes you as the sender if it knows you, and can answer in a like manner immediately. The spell enables creatures with Intelligence scores of at least 1 to understand the meaning of your message. @@ -242,6 +255,7 @@ class Sending(Spell): You can send the message across any distance and even to other planes of existence, but if the target is on a different plane than you, there is a 5 percent chance that the message doesn't arrive. + """ name = "Sending" @@ -264,13 +278,14 @@ class Sequester(Spell): through scrying sensors created by the divination of spells. If the target is a - crreature, it falls into a state of suspended animation. Time ceases to flow + creature, it falls into a state of suspended animation. Time ceases to flow for it, and it doesn't grow older. You can set a condition for the spell to end early. The condition can be anything you choose, but it must occur or be visible within 1 mile of the target. Examples include after 1,000 years or when the tarrasque awakes. This spells also ends if the target takes any damage. + """ name = "Sequester" @@ -299,11 +314,12 @@ class ShadowBlade(Spell): dissipates at the end of the turn. Thereafter, while the spell persists, you can use a bonus action to cause the sword to reappear in your hand. - At Higher - Levels: When you cast this spell using a 3rd- or 4th-level spell slot, the + **At Higher + Levels:** When you cast this spell using a 3rd- or 4th-level spell slot, the damage increases to 3d8. When you cast it using a 5th- or 6th-level spell slot, the damage increases to 4d8. When you cast it using a spell slot of 7th level or higher, the damage increases to 5d8. + """ name = "Shadow Blade" @@ -326,6 +342,7 @@ class ShadowOfMoil(Spell): ends, you have resistance to radiant damage. In addition, whenever a creature within 10 feet of you hits you with an attack, the shadows lash out at that creature, dealing it 2d8 necrotic damage. + """ name = "Shadow Of Moil" @@ -353,7 +370,7 @@ class ShapeWater(Spell): - 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 + - You freeze the water, provided that there are no creatures in it. The water unfreezes in 1 hour. If you cast this spell multiple times, you can have no more than @@ -416,6 +433,7 @@ class Shapechange(Spell): your action to assume a different form following the same restrictions and rules for the original form, with one exception: if your new form has more hit pints than your current one, your hit points remain at their current value. + """ name = "Shapechange" @@ -489,6 +507,7 @@ class Shield(Spell): class ShieldOfFaith(Spell): """A shimmering field appears and surrounds a creature of your choice within range, granting it a +2 bonus to AC for the duration. + """ name = "Shield Of Faith" @@ -506,11 +525,13 @@ class ShieldOfFaith(Spell): class Shillelagh(Spell): """The wood of a club or quarterstaff you are holding is imbued with nature's power. + For the duration, you can use your spellcasting ability instead of Strength for the attack and damage rolls of melee attacks using that weapon, and the weapon's damage die becomes a d8. The weapon also becomes magical, if it isn't already. The spell ends if you cast it again or if you let go of the weapon + """ name = "Shillelagh" @@ -535,6 +556,7 @@ class ShockingGrasp(Spell): **At Higher Levels:** The spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8). + """ name = "Shocking Grasp" @@ -553,12 +575,14 @@ class SickeningRadiance(Spell): """Dim, greenish light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. + When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim, greenish light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. + """ name = "Sickening Radiance" @@ -579,6 +603,7 @@ class Silence(Spell): inside the sphere is immune to thunder damage, and creatures are deafened while entirely inside it. Casting a spell that includes a verbal component is impossible there. + """ name = "Silence" @@ -611,6 +636,7 @@ class SilentImage(Spell): with a successful Intelligence (Investigation) check against your spell save DC. If a creature discerns the illusion for what it is, the creature can see through the image. + """ name = "Silent Image" @@ -634,7 +660,6 @@ class Simulacrum(Spell): has half the creature's hit point maximum and is formed without any equipment. Otherwise, the illusion uses all the statistics of the creature it duplicates. - The simulacrum is friendly to you and creatures you designate. It obeys your spoken commands, moving and acting in accordance with your wishes and acting on your turn in combat. The simulacrum lacks the ability to learn or become more @@ -648,6 +673,7 @@ class Simulacrum(Spell): If you cast this spell again, any currently active duplicates you created with this spell are instantly destroyed. + """ name = "Simulacrum" @@ -675,6 +701,7 @@ class SkillEmpowerment(Spell): You must choose a skill in which the target is proficient and that isn't already benefiting from an effect, such as Expertise, that doubles its proficiency bonus. + """ name = "Skill Empowerment" @@ -694,6 +721,7 @@ class Skywrite(Spell): appear to be made of cloud and remain in place for the spell's duration. The words dissipate when the spell ends. A strong wind can disperse the clouds and end the spell early. + """ name = "Skywrite" @@ -721,12 +749,14 @@ class Sleep(Spell): from the total before moving on to the creature with the next lowest hit points. A creature's hit points must be equal to or less than the remaining total for that creature to be affected. + Undead and creatures immune to being charmed aren't affected by this spell. **At Higher Levels:** When you cast this spell using a spell slot of 2nd level or higher, roll an additional 2d8 for each slot level above 1st. + """ name = "Sleep" @@ -755,6 +785,7 @@ class SleetStorm(Spell): creature is concentrating in the spell's area, the creature must make a successful Constitution saving throw against your spell save DC or lose concentration. + """ name = "Sleet Storm" @@ -788,6 +819,7 @@ class Slow(Spell): A creature affected by this spell makes another Wisdom saving throw at the end of its turn. On a successful save, the effect ends for it. + """ name = "Slow" @@ -806,10 +838,10 @@ class Snare(Spell): """As you cast this spell, you use the rope to create a circle with a 5-foot radius on the ground or the floor. When you finish casting, the rope disappears and the circle becomes a magic trap. - + This trap is nearly invisible, requiring a successful Intelligence (Investigation) check against your spell save DC to be discerned. - + The trap triggers when a Small, Medium, or Large creature moves onto the ground or the floor in the spell's radius. That creature must succeed on a Dexterity saving throw or be magically hoisted @@ -841,14 +873,16 @@ class Snare(Spell): class SnillocsSnowballSwarm(Spell): - """(a piece of ice or a small white rock chip) + """ A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 5-foot-radius sphere centered on that point must make a Dexterity saving throw. A creature takes 3d6 cold damage on a failed save, or half as much damage on a successful one. - At - Higher Levels. When you cast this spell using a spell slot of 3rd level or + + **At + Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd. + """ name = "Snillocs Snowball Swarm" @@ -856,7 +890,7 @@ class SnillocsSnowballSwarm(Spell): casting_time = "1 action" casting_range = "90 feet" components = ("V", "S", "M") - materials = "" + materials = "A piece of ice or a small white rock chip)" duration = "Instantaneous" ritual = False magic_school = "Evocation" @@ -874,28 +908,37 @@ class SoulCage(Spell): ways described below. You can use a trapped soul up to six times. Once you exploit a soul for the sixth time, it is released, and the spell ends. While a soul is trapped, the dead humanoid it came from can't be revived. + Steal Life. - You can use a bonus action to drain vigor from the soul and regain 2d8 hit - points. - Query Soul. You ask the soul a question (no action required) and receive - a brief telepathic answer, which you can understand regardless of the language - used. The soul knows only what it knew in life, but it must answer you - truthfully and to the best of its ability. The answer is no more than a sentence - or two and might be cryptic. - Borrow Experience. You can use a bonus action to - bolster yourself with the soul's life experience, making your next attack roll, - ability check, or saving throw with advantage. If you don't use this benefit - before the start of your next turn, it is lost. - Eyes of the Dead. You can use an - action to name a place the humanoid saw in life, which creates an invisible - sensor somewhere in that place if it is on the plane of existence you're - currently on. The sensor remains for as long as you concentrate, up to 10 - minutes (as if you were concentrating on a spell). You receive visual and - auditory information from the sensor as if you were in its space using your - senses. + You can use a bonus action to drain vigor from the soul and + regain 2d8 hit points. + + Query Soul. + You ask the soul a question (no action required) and receive + a brief telepathic answer, which you can understand regardless of the language + used. The soul knows only what it knew in life, but it must answer you + truthfully and to the best of its ability. The answer is no more than a sentence + or two and might be cryptic. + + Borrow Experience. + You can use a bonus action to + bolster yourself with the soul's life experience, making your next attack roll, + ability check, or saving throw with advantage. If you don't use this benefit + before the start of your next turn, it is lost. + + Eyes of the Dead. + You can use an + action to name a place the humanoid saw in life, which creates an invisible + sensor somewhere in that place if it is on the plane of existence you're + currently on. The sensor remains for as long as you concentrate, up to 10 + minutes (as if you were concentrating on a spell). You receive visual and + auditory information from the sensor as if you were in its space using your + senses. + A creature that can see the sensor (such as one using see invisibility or truesight) sees a translucent image of the tormented humanoid whose soul you caged. + """ name = "Soul Cage" @@ -913,6 +956,7 @@ class SoulCage(Spell): class SpareTheDying(Spell): """You touch a living creature that has 0 hit points. The creature becomes stable. This spell has no effect on undead or constructs. + """ name = "Spare The Dying" @@ -930,11 +974,13 @@ class SpareTheDying(Spell): class SpeakWithAnimals(Spell): """You gain the ability to comprehend and verbally communicate with beasts for the duration. + The knowledge and awareness of many beasts is limited by their intelligence, but at minimum, beasts can give you information about nearby locations and monsters, including whatever they can perceive or have perceived within the past day. You might be able to persuade a beast to perform a small favor for you, at the DM's discretion. + """ name = "Speak With Animals" @@ -963,6 +1009,7 @@ class SpeakWithDead(Spell): return the creature's soul to its body, only its animating spirit. Thus, the corpse can't learn new information, doesn't comprehend anything that has happened since it died, and can't speculate about future events. + """ name = "Speak With Dead" @@ -998,9 +1045,9 @@ class SpeakWithPlants(Spell): If a plant creature is in the area, you can communicate with it as if you shared a common language, but you gain no magical ability to influence it. - This spell can cause the plants created by the entangle spell to release a restrained creature. + """ name = "Speak With Plants" @@ -1020,6 +1067,7 @@ class SpiderClimb(Spell): up, down, and across vertical surfaces and upside down along ceilings, while leaving its hands free. The target also gains a climbing speed equal to its walking speed. + """ name = "Spider Climb" @@ -1044,6 +1092,7 @@ class SpikeGrowth(Spell): camouflaged to look natural. Any creature that can't see the area at the time the spell is case must make a Wisdom (Perception) check against your spell save DC to recognize the terrain as hazardous before entering it. + """ name = "Spike Growth" @@ -1072,9 +1121,10 @@ class SpiritGuardians(Spell): 3d8 radiant damage (if you are good or neutral) or 3d8 necrotic damage (if you are evil). On a successful save, the creature takes half as much damage. - At - Higher Levels: When you cast this spell using a spell slot of 4th level or + **At + Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. + """ name = "Spirit Guardians" @@ -1096,7 +1146,6 @@ class SpiritualWeapon(Spell): melee spell attack against a creature within 5 feet of the weapon. On a hit, the target takes force damage equal to 1d8 + your spellcasting ability modifier. - As a bonus action on your turn, you can move the weapon up to 20 feet and repeat the attack against a creature within 5 feet of it. @@ -1108,6 +1157,7 @@ class SpiritualWeapon(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for every two slot levels above the 2nd. + """ name = "Spiritual Weapon" @@ -1128,6 +1178,7 @@ class StaggeringSmite(Spell): 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. + """ name = "Staggering Smite" @@ -1149,6 +1200,7 @@ class SteelWindStrike(Spell): You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. + """ name = "Steel Wind Strike" @@ -1177,6 +1229,7 @@ class StinkingCloud(Spell): A moderate wind (at least 10 miles per hour) disperses the cloud after 4 rounds. A strong wind (at least 20 miles per hour) disperses it after 1 round. + """ name = "Stinking Cloud" @@ -1199,6 +1252,7 @@ class StoneShape(Spell): 5 feet thick. You could also shape a stone door or its frame to seal the door shut. The object you create can have up to two hinges and a latch, but finer mechanical detail isn't possible. + """ name = "Stone Shape" @@ -1220,6 +1274,7 @@ class Stoneskin(Spell): """This spell turns the flesh of a willing creature you touch as hard as stone. Until the spell ends, the target has resistance to nonmagical bludgeoning, piercing, and slashing damage. + """ name = "Stoneskin" @@ -1245,29 +1300,35 @@ class StormOfVengeance(Spell): round you maintain concentration on this spell, the storm produces additional effects on your turn. - Round 2 - Acidic rain falls from the cloud. Each creature - and object under the cloud takes 1d6 acid damage. - - Round 3You call six bolts of - lightning from the cloud to strike six creatures or objects of your choice - beneath the cloud. A given creature or object can't be struck by more than one - bolt. A struck creature must make a Dexterity saving throw. The creature takes - 10d6 lightning damage on a failed save, or half as much damage on a successful - one. - - Round 4 - Hailstones rain down from the cloud. Each creature under the cloud - takes 2d6 bludgeoning damage. - - Round 5-10 - Gusts and freezing rain assail the - area under the cloud. the area becomes difficult terrain and is heavily - obscured. Each creature there takes 1d6 cold damage. Ranged weapon attacks in - the area are impossible. The wind and rain count as a severe distraction for the - purposes of maintaining concentration on spells. Finally, gusts of strong wind - (ranging from 20 to 50 miles per hour) automatically disperse fog, mists, and - similar phenomena in the area whether mundane or magical. + ========= =============================================================== + Storm of Vengeance after Round 1 + ---------------------------------------------------------------------------- + Round Effect + ========= =============================================================== + 2 Acidic rain falls from the cloud. Each creature + and object under the cloud takes 1d6 acid damage. + + 3 You call six bolts of lightning from the cloud to strike six + creatures or objects of your choice beneath the cloud. A + given creature or object can't be struck by more than one + bolt. A struck creature must make a Dexterity saving throw. + The creature takes 10d6 lightning damage on a failed save, + or half as much damage on a successful one. + + 4 Hailstones rain down from the cloud. Each creature under + the cloud takes 2d6 bludgeoning damage. + + 5-10 Gusts and freezing rain assail the area under the cloud. + The area becomes difficult terrain and is heavily + obscured. Each creature there takes 1d6 cold damage. + Ranged weapon attacks in the area are impossible. The + wind and rain count as a severe distraction for the + purposes of maintaining concentration on spells. Finally, + gusts of strong wind (ranging from 20 to 50 miles per + hour) automatically disperse fog, mists, and + similar phenomena in the area whether mundane or magical. + ========= =============================================================== + """ name = "Storm Of Vengeance" @@ -1288,6 +1349,7 @@ class StormSphere(Spell): creature in the sphere when it appears or that ends its turn there must succeed on a Strength saving throw or take 2d6 bludgeoning damage. The sphere's space is difficult terrain. + Until the spell ends, you can use a bonus action on each of your turns to cause a bolt of lightning to leap from the center of the sphere toward one creature you choose within 60 feet of the center. Make a ranged @@ -1296,9 +1358,11 @@ class StormSphere(Spell): Creatures within 30 feet of the sphere have disadvantage on Wisdom (Perception) checks made to listen. - At Higher Levels. When you cast this spell using a spell slot of 5th + + **At Higher Levels.** When you cast this spell using a spell slot of 5th level or higher, the damage increases for each of its effects by 1d6 for each slot level above 4th. + """ name = "Storm Sphere" @@ -1335,6 +1399,7 @@ class Suggestion(Spell): If you or any of your companions damage the target, the spell ends. + """ name = "Suggestion" @@ -1357,11 +1422,13 @@ class SummonGreaterDemon(Spell): as a shadow demon or a barlgura. The demon appears in an unoccupied space you can see within range, and the demon disappears when it drops to 0 hit points or when the spell ends. + Roll initiative for the demon, which has its own turns. When you summon it and on each of your turns thereafter, you can issue a verbal command to it (requiring no action on your part), telling it what it must do on its next turn. If you issue no command, it spends its turn attacking any creature within reach that has attacked it. + At the end of each of the demon's turns, it makes a Charisma saving throw. The demon has disadvantage on this saving throw if you say its true name. On a failed save, the demon continues to @@ -1370,6 +1437,7 @@ class SummonGreaterDemon(Spell): non-demons to the best of its ability. If you stop concentrating on the spell before it reaches its full duration, an uncontrolled demon doesn't disappear for 1d6 rounds if it still has hit points. + As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the @@ -1380,6 +1448,7 @@ class SummonGreaterDemon(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 5th level or higher, the challenge rating increases by 1 for each slot level above 4th. + """ name = "Summon Greater Demon" @@ -1397,12 +1466,14 @@ class SummonGreaterDemon(Spell): class SummonLesserDemons(Spell): """You utter foul words, summoning demons from the chaos of the Abyss. Roll on the following table to determine what appears. - d6 / Demons Summoned - 1–2 / Two demons - of challenge rating 1 or lower - 3–4 / Four demons of challenge rating 1/2 or - lower - 5–6 / Eight demons of challenge rating 1/4 or lower + + ====== ==================================================== + d6 Demons Summoned + ====== ==================================================== + 1-2 Two demons of challenge rating 1 or lower + 3-4 Four demons of challenge rating 1/2 or lower + 5-6 Eight demons of challenge rating 1/4 or lower + ====== ==================================================== The DM chooses the demons, such as manes or dretches, and you choose the unoccupied spaces you can @@ -1412,16 +1483,18 @@ class SummonLesserDemons(Spell): including you. Roll initiative for the summoned demons as a group, which has its own turns. The demons pursue and attack the nearest non-demons to the best of their ability. + As part of casting the spell, you can form a circle on the ground with the blood used as a material component. The circle is large enough to encompass your space. While the spell lasts, the summoned demons can't cross the circle or harm it, and they can't target anyone within it. Using the material component in this manner consumes it when the spell ends. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a spell slot of 6th or 7th level, you summon twice as many demons. If you cast it using a spell slot of 8th or 9th level, you summon three times as many demons. + """ name = "Summon Lesser Demons" @@ -1448,10 +1521,10 @@ class Sunbeam(Spell): You can create a new line of radiance as your action on any turn until the spell ends. - For the duration, a mote of brilliant radiance shines in your hand. It sheds bright light in a 30-foot radius and dim light for an additional 30 feet. The light is sunlight. + """ name = "Sunbeam" @@ -1480,6 +1553,7 @@ class Sunburst(Spell): This spell dispels any darkness in its area that was created by a spell. + """ name = "Sunburst" @@ -1505,6 +1579,7 @@ class SwiftQuiver(Spell): used with a similar piece of nonmagical ammunition. Any pieces of ammunition created by this spell disintegrate when the spell ends. If the quiver leaves your possession, the spell ends. + """ name = "Swift Quiver" @@ -1527,6 +1602,7 @@ class SwordBurst(Spell): **At Higher Levels:** This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6). + """ name = "Sword Burst" @@ -1570,55 +1646,56 @@ class Symbol(Spell): creatures that don't trigger the glyph, such as those who say a certain password. - When you inscribe the glyph, choose one of the options below for ist + When you inscribe the glyph, choose one of the options below for its effect. Once triggered, the glyph glows, filling a 60-foot-radius sphere with dim light for 10 minutes, after which time the spell ends. Each creature in the sphere when the glyph activates is targeted by its effect, as is a creature that enters the sphere for the first time on a turn or ends its turn there. - Death + Death. + Each target must make a Constitution saving throw, taking 10d10 necrotic damage + on a failed save, or half as much damage on a successful save. + + Discord. + Each + target must make a Constitution saving throw. On a failed save, a target bickers + and argues with other creatures for 1 minute. During this time, it is incapable + of meaningful communication and has disadvantage on attack rolls and ability + checks. + + Fear. + Each target must make a Wisdom saving throw and becomes frightened + for 1 minute on a failed save. While frightened, the target drops whatever it is + holding and must move at least 20 feet away from the glyph on each of ist + turns, if able. + + Hopelessness. + Each target must make a Charisma saving throw. On + a failed save, the target is overwhelmed with despair for 1 minute. During this + time, it can't attack or target any creature with harmful abilities, spells, or + other magical effects. + + Insanity. + Each target must make an Intelligence saving + throw. On a failed save, the target is driven insane for 1 minute. An insane + creature can't take actions, can't understand what other creatures say, can't + read, and speaks only in gibberish. The DM controls its movement, which is + erratic. + + Pain. + Each target must make a Constitution saving throw and becomes + incapacitated with excruciating pain for 1 minute on a failed save. + + Sleep. + Each + target must make a Wisdom saving throw and falls unconscious for 10 minutes on a + failed save. A creature awakens if it takes damage or if someone uses an action + to shake or slap it awake. + + Stunning. + Each target must make a Wisdom saving + throw and becomes stunned for 1 minute on a failed save. - Each target must make a Constitution saving throw, taking 10d10 necrotic damage - on a failed save, or half as much damage on a successful save. - - Discord - Each - target must make a Constitution saving throw. On a failed save, a target bickers - and argues with other creatures for 1 minute. During this time, it is incapable - of meaningful communication and has disadvantage on attack rolls and ability - checks. - Fear - Each target must make a Wisdom saving throw and becomes frightened - for 1 minute on a failed save. While frightened, the target drops whatever it is - holding and must move at least 20 feet away from the glyph on each of ist - turns, if able. - - Hopelessness - Each target must make a Charisma saving throw. On - a failed save, the target is overwhelmed with despair for 1 minute. During this - time, it can't attack or target any creature with harmful abilities, spells, or - other magical effects. - - Insanity - Each target must make an Intelligence saving - throw. On a failed save, the target is driven insane for 1 minute. An insane - creature can't take actions, can't understand what other creatures say, can't - read, and speaks only in gibberish. The DM controls its movement, which is - erratic. - - Pain - Each target must make a Constitution saving throw and becomes - incapacitated with excruciating pain for 1 minute on a failed save. - - Sleep - Each - target must make a Wisdom saving throw and falls unconscious for 10 minutes on a - failed save. A creature awakens if it takes damage or if someone uses an action - to shake or slap it awake. - - Stunning - Each target must make a Wisdom saving - throw and becomes stunned for 1 minute on a failed save. """ name = "Symbol" @@ -1642,12 +1719,14 @@ class SynapticStatic(Spell): Intelligence saving throw. A creature with an Intelligence score of 2 or lower can't be affected by this spell. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful one. + After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks, as well as its Constitution saving throws to maintain concentration. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. + """ name = "Synaptic Static" diff --git a/dungeonsheets/spells/spells_t.py b/dungeonsheets/spells/spells_t.py index 8888e2b6..10aff251 100644 --- a/dungeonsheets/spells/spells_t.py +++ b/dungeonsheets/spells/spells_t.py @@ -12,6 +12,7 @@ class TashasHideousLaughter(Spell): turns, and each time it takes damage, the target can make another Wisdom saving throw. The target has advantage on the saving throw if it's triggered by damage. On a success, the spell ends. + """ name = "Tashas Hideous Laughter" @@ -35,31 +36,35 @@ class Telekinesis(Spell): or choose a new one at any time. If you switch targets, the prior target is no longer affected by the spell. - Creature - You can try to move a Huge or smaller - creature. Make an ability check with your spellcasting ability contested by the - creature's Strength check. If you win the contest, you move the creature up to - 30 feet in any direction, including upward but not beyond the range of this - spell. Until the end of your next turn, the creature is restrained in your - telekinetic grip. A creature lifted upward is suspended in mid-air. - On - subsequent rounds, you can use your action to attempt to maintain your - telekinetic grip on the creature by repeating the contest. - - Object - You can try - to move an object that weighs up to 1,000 pounds. If the object isn't being worn - or carried, you automatically move it up to 30 feet in any direction, but not - beyond the range of this spell. - If the object is worn or carried by a creature, - you must make an ability check with your spellcasting ability contested by that - creature's Strength check. If you succeed, you pull the object away from that - creature and can move it up to 30 feet in any direction but not beyond the range - of this spell. - You can exert fine control on objects with your telekinetic - grip, such as manipulating a simple tool, opening a door or a container, stowing - or retrieving an item from an open container, or pouring the contents from a - vial. + Creature. + You can try to move a Huge or smaller + creature. Make an ability check with your spellcasting ability contested by the + creature's Strength check. If you win the contest, you move the creature up to + 30 feet in any direction, including upward but not beyond the range of this + spell. Until the end of your next turn, the creature is restrained in your + telekinetic grip. A creature lifted upward is suspended in mid-air. + + On + subsequent rounds, you can use your action to attempt to maintain your + telekinetic grip on the creature by repeating the contest. + + Object. + You can try + to move an object that weighs up to 1,000 pounds. If the object isn't being worn + or carried, you automatically move it up to 30 feet in any direction, but not + beyond the range of this spell. + + If the object is worn or carried by a creature, + you must make an ability check with your spellcasting ability contested by that + creature's Strength check. If you succeed, you pull the object away from that + creature and can move it up to 30 feet in any direction but not beyond the range + of this spell. + + You can exert fine control on objects with your telekinetic + grip, such as manipulating a simple tool, opening a door or a container, stowing + or retrieving an item from an open container, or pouring the contents from a + vial. + """ name = "Telekinesis" @@ -80,13 +85,13 @@ class Telepathy(Spell): The creature can be anywhere on the same plane of existence as you. The spell ends if you or the target are no longer on the same plane. - Until the spell ends, you and the target can instantaneously share words, images, sounds, and other sensory messages with one another through the link, and the target recognizes you as the creature it is communicating with. The spell enables a creature with an Intelligence score of at least 1 to understand the meaning of your words and take in the scope of any sensory messages you send to it. + """ name = "Telepathy" @@ -119,11 +124,11 @@ class Teleport(Spell): ================== ========== ============ ========== ========== Permanent circle -- -- -- 01-100 Associated object -- -- -- 01-100 - Very familiar 01–05 06–13 14–24 25–100 - Seen casually 01–33 34–43 44–53 54–100 - Viewed once 01–43 44–53 54–73 74–100 - Description 01–43 44–53 54–73 74–100 - False destination 01–50 51–100 -- -- + Very familiar 01-05 06-13 14-24 25-100 + Seen casually 01-33 34-43 44-53 54-100 + Viewed once 01-43 44-53 54-73 74-100 + Description 01-43 44-53 54-73 74-100 + False destination 01-50 51-100 -- -- ================== ========== ============ ========== ========== Familiarity. @@ -146,10 +151,10 @@ class Teleport(Spell): tried to scry an enemy's sanctum but instead viewed an illusion, or you are attempting to teleport to a familiar location that no longer exists. - On Target + On Target. You and your group (or the target object) appear where you want to. - Off Target + Off Target. You and your group (or the target object) appear a random distance away from the destination in a random direction. Distance off target is 1d10 x 1d10 percent of the @@ -161,7 +166,7 @@ class Teleport(Spell): east, and so on around the points of the compass. If you were teleporting to a coastal city and wound up 18 miles out at sea, you could be in trouble. - Similar Area + Similar Area. You and your group (or the target object) wind up in a different area that's visually or thematically similar to the target area. If you are heading for your home laboratory, for example, @@ -170,7 +175,7 @@ class Teleport(Spell): implements as your laboratory. Generally, you appear in the closest similar place, but since the spell has no range limit, you could conceivably wind up anywhere on the plane. - Mishap + Mishap. The spell's unpredictable magic results in a difficult journey. Each teleporting creature (or the target object) takes 3d10 force damage, and the DM rerolls on the table to see where @@ -196,6 +201,7 @@ class TeleportationCircle(Spell): inscribed with sigils that link your location to a permanent teleportation circle of your choice whose sigil sequence you know and that is on the same plane of existence as you. + A shimmering portal opens within the circle you drew and remains open until the end of your next turn. Any creature that enters the portal instantly appears within 5 feet of the destination circle or in the @@ -214,6 +220,7 @@ class TeleportationCircle(Spell): teleportation circle by casting this spell in the same location every day for one year. You need not use the circle to teleport when you cast the spell in this way. + """ name = "Teleportation Circle" @@ -241,10 +248,12 @@ class TempleOfTheGods(Spell): by a floor, walls, and a roof, with one door granting access to the interior and as many windows as you wish. Only you and any creatures you designate when you cast the spell can open or close the door. + The temple's interior is an open space with an idol or altar at one end. You decide whether the temple is illuminated and whether that illumination is bright light or dim light. The smell of burning incense fills the air within, and the temperature is mild. + The temple opposes types of creatures you choose when you cast this spell. Choose one or more of the following: celestials, elementals, fey, fiends, or undead. If @@ -253,20 +262,25 @@ class TempleOfTheGods(Spell): hours. Even if the creature can enter the temple, the magic there hinders it; whenever it makes an attack roll, an ability check, or a saving throw inside the temple, it must roll a d4 and subtract the number rolled from the d20 roll. + In addition, the sensors created by divination spells can't appear inside the temple, and creatures within can't be targeted by divination spells. + Finally, whenever any creature in the temple regains hit points from a spell of 1st level or higher, the creature regains additional hit points equal to your Wisdom modifier (minimum 1 hit point). + The temple is made from opaque magical force that extends into the Ethereal Plane, thus blocking ethereal travel into the temple's interior. Nothing can physically pass through the temple's exterior. It can't be dispelled by dispel magic, and antimagic field has no effect on it. A disintegrate spell destroys the temple instantly. + Casting this spell on the same spot every day for a year makes this effect permanent. + """ name = "Temple Of The Gods" @@ -298,6 +312,7 @@ class TensersFloatingDisk(Spell): If you move more than 100 feet from the disk (typically because it can't move around an obstacle to follow you), the spell ends. + """ name = "Tensers Floating Disk" @@ -315,25 +330,27 @@ class TensersFloatingDisk(Spell): class TensersTransformation(Spell): """You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits: + - You - gain 50 temporary hit points. If any of these remain when the spell ends, they - are lost. + gain 50 temporary hit points. If any of these remain when the spell ends, they + are lost. - You have advantage on attack rolls that you make with simple and - martial weapons. + martial weapons. - When you hit a target with a weapon attack, that target takes - an extra 2d12 force - damage. + an extra 2d12 force + damage. - You have proficiency with all armor, shields, - simple weapons, and martial weapons. + simple weapons, and martial weapons. - You have proficiency in Strength and - Constitution saving throws. + Constitution saving throws. - You can attack twice, instead of once, when you - take the Attack action on your turn. You ignore this benefit if you already have - a feature, like Extra Attack, that gives you extra attacks. + take the Attack action on your turn. You ignore this benefit if you already have + a feature, like Extra Attack, that gives you extra attacks. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. + """ name = "Tensers Transformation" @@ -389,9 +406,9 @@ class ThornWhip(Spell): target. If the attack hits, the creature takes 1d6 piercing damage, and if the creature is Large or smaller, you pull the creature up to 10 feet closer to you. - **At Higher Levels:** This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6). + """ name = "Thorn Whip" @@ -412,6 +429,7 @@ class ThunderStep(Spell): within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. The thunder can be heard from up to 300 feet away. + You can bring along objects as long as their weight doesn't exceed what you can carry. You can also teleport one willing creature of your size or smaller who is carrying @@ -422,6 +440,7 @@ class ThunderStep(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. + """ name = "Thunder Step" @@ -444,6 +463,7 @@ class Thunderclap(Spell): The spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6). + """ name = "Thunderclap" @@ -464,6 +484,7 @@ class ThunderousSmite(Spell): attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. + """ name = "Thunderous Smite" @@ -493,6 +514,7 @@ class Thunderwave(Spell): **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 = "Thunderwave" @@ -515,6 +537,7 @@ class TidalWave(Spell): save, a creature takes half as much damage and isn't knocked prone. The water then spreads out across the ground in all directions, extinguishing unprotected flames in its area and within 30 feet of it, and then it vanishes. + """ name = "Tidal Wave" @@ -539,6 +562,7 @@ class TimeStop(Spell): creature other than you or an object being worn or carried by someone other than you. In addition, the spell ends if you move to a place more than 1,000 feet from the location where you cast it. + """ name = "Time Stop" @@ -559,6 +583,7 @@ class TinyServant(Spell): sprouts little arms and legs, becoming a creature under your control until the spell ends or the creature drops to 0 hit points. See the stat block for its statistics. + As a bonus action, you can mentally command the creature if it is within 120 feet of you. (If you control multiple creatures with this spell, you can command any or all of them at the same time, issuing the same command to @@ -568,10 +593,11 @@ class TinyServant(Spell): servant does nothing other than defend itself against hostile creatures. Once given an order, the servant continues to follow that order until its task is complete. + When the creature drops to 0 hit points, it reverts to its original form, and any remaining damage carries over to that form. - At Higher Levels: + **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, you can animate two additional objects for each slot level above 3rd. """ @@ -596,6 +622,7 @@ class TollTheDead(Spell): The spell's damage increases by one die when you reach 5th level (2d8 or 2d12), 11th level (3d8 or 3d12), and 17th level (4d8 or 4d12). + """ name = "Toll The Dead" @@ -614,6 +641,7 @@ class Tongues(Spell): """This spell grants the creature you touch the ability to understand any spoken language it hears. Moreover, when the target speaks, any creature that knows at least one language and can hear the target understands what it says. + """ name = "Tongues" @@ -631,30 +659,35 @@ class Tongues(Spell): class TransmuteRock(Spell): """You choose an area of stone or mud that you can see that fits within a 40-foot cube and is within range, and choose one of the following effects. - Transmute - Rock to Mud. Nonmagical rock of any sort in the area becomes an equal volume of - thick, flowing mud that remains for the spell's duration. - The ground in the - spell's area becomes muddy enough that creatures can sink into it. Each foot - that a creature moves through the mud costs 4 feet of movement, and any creature - on the ground when you cast the spell must make a Strength saving throw. A - creature must also make the saving throw when it moves into the area for the - first time on a turn or ends its turn there. On a failed save, a creature sinks - into the mud and is restrained, though it can use an action to end the - restrained condition on itself by pulling itself free of the mud. - If you cast - the spell on a ceiling, the mud falls. Any creature under the mud when it falls - must make a Dexterity saving throw. A creature takes 4d8 bludgeoning damage on a - failed save, or half as much damage on a successful one. + + Transmute Rock to Mud. + Nonmagical rock of any sort in the area becomes an equal volume of + thick, flowing mud that remains for the spell's duration. + + The ground in the + spell's area becomes muddy enough that creatures can sink into it. Each foot + that a creature moves through the mud costs 4 feet of movement, and any creature + on the ground when you cast the spell must make a Strength saving throw. A + creature must also make the saving throw when it moves into the area for the + first time on a turn or ends its turn there. On a failed save, a creature sinks + into the mud and is restrained, though it can use an action to end the + restrained condition on itself by pulling itself free of the mud. + + If you cast + the spell on a ceiling, the mud falls. Any creature under the mud when it falls + must make a Dexterity saving throw. A creature takes 4d8 bludgeoning damage on a + failed save, or half as much damage on a successful one. + Transmute Mud to Rock. - Nonmagical mud or quicksand in the area no more than 10 feet deep transforms - into soft stone for the spell's duration. Any creature in the mud when it - transforms must make a Dexterity saving throw. On a successful save, a creature - is shunted safely to the surface in an unoccupied space. On a failed save, a - creature becomes restrained by the rock. A restrained creature, or another - creature within reach, can use an action to try to break the rock by succeeding - on a DC 20 Strength check or by dealing damage to it. The rock has AC 15 and 25 - hit points, and it is immune to poison and psychic damage. + Nonmagical mud or quicksand in the area no more than 10 feet deep transforms + into soft stone for the spell's duration. Any creature in the mud when it + transforms must make a Dexterity saving throw. On a successful save, a creature + is shunted safely to the surface in an unoccupied space. On a failed save, a + creature becomes restrained by the rock. A restrained creature, or another + creature within reach, can use an action to try to break the rock by succeeding + on a DC 20 Strength check or by dealing damage to it. The rock has AC 15 and 25 + hit points, and it is immune to poison and psychic damage. + """ name = "Transmute Rock" @@ -675,6 +708,7 @@ class TransportViaPlants(Spell): You must have seen or touched the destination plant at least once before. For the duration, any creature can step into the target plant and exit from the destination plant by using 5 feet of movement. + """ name = "Transport Via Plants" @@ -700,9 +734,9 @@ class TreeStride(Spell): choice within 5 feet of the destination tree, using another 5 feet of movement. If you have no movement left, you appear within 5 feet of the tree you entered. - You can use this transportation ability once per round for the duration. You must end each turn outside a tree. + """ name = "Tree Stride" @@ -729,46 +763,51 @@ class TruePolymorph(Spell): affected by this spell. An unwilling creature can make a Wisdom saving throw, and if it succeeds, it isn't affected by this spell. - Creature into Creature - If - you turn a creature into another kind of creature, the new form can be any kind - you choose whose challenge rating is equal to or less than the target's (or its - level, if the target doesn't have a challenge rating). The target's game - statistics, including mental ability scores, are replaced by the statistics of - the new form. It retains its alignment and personality. - The target assumes the - hit points of its new form, and when it reverts to its normal form, the creature - 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 creature's normal - form to 0 hit points, it isn't knocked unconscious. - The creature is limited in - the actions it can perform by the nature of its new form, and it can't speak, - cast spells, or take any other action that requires hands or speech unless its - new form is capable of such actions. - The target's gear melds into the new form. - The creature can't activate, use, wield, or otherwise benefit from any of its - equipment. - - Object into Creature - You can turn an object into any kind of - creature, as long as the creature's size is no larger than the object's size and - the creature's challenge rating is 9 or lower. The creature is friendly to you - and your companions. It acts on each of your turns. You decide what action it - takes and how it moves. The DM has the creature's statistics and resolves all of - its actions and movement. - If the spell becomes permanent, you no longer control - the creature. It might remain friendly to you, depending on how you have - treated it. - - Creature into Object - If you turn a creature into an object, it - transforms along with whatever it is wearing and carrying into that form. The - creature's statistics become those of the object, and the creature has no memory - of time spent in this form, after the spell ends and it returns to its normal - form. + Creature into Creature. + If + you turn a creature into another kind of creature, the new form can be any kind + you choose whose challenge rating is equal to or less than the target's (or its + level, if the target doesn't have a challenge rating). The target's game + statistics, including mental ability scores, are replaced by the statistics of + the new form. It retains its alignment and personality. + + The target assumes the + hit points of its new form, and when it reverts to its normal form, the creature + 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 creature's normal + form to 0 hit points, it isn't knocked unconscious. + + The creature is limited in + the actions it can perform by the nature of its new form, and it can't speak, + cast spells, or take any other action that requires hands or speech unless its + new form is capable of such actions. + + The target's gear melds into the new form. + The creature can't activate, use, wield, or otherwise benefit from any of its + equipment. + + Object into Creature. + You can turn an object into any kind of + creature, as long as the creature's size is no larger than the object's size and + the creature's challenge rating is 9 or lower. The creature is friendly to you + and your companions. It acts on each of your turns. You decide what action it + takes and how it moves. The DM has the creature's statistics and resolves all of + its actions and movement. + + If the spell becomes permanent, you no longer control + the creature. It might remain friendly to you, depending on how you have + treated it. + + Creature into Object. + If you turn a creature into an object, it + transforms along with whatever it is wearing and carrying into that form. The + creature's statistics become those of the object, and the creature has no memory + of time spent in this form, after the spell ends and it returns to its normal + form. This spell can't affect a target that has 0 hit points. + """ name = "True Polymorph" @@ -796,6 +835,7 @@ class TrueResurrection(Spell): The spell can even provide a new body if the original no longer exists, in which case you must speak the creature's name. The creature then appears in an unoccupied space you choose within 10 feet of you. + """ name = "True Resurrection" @@ -818,6 +858,7 @@ class TrueSeeing(Spell): they actually are. For the duration, the creature has truesight, notices secret doors hidden by magic, and can see into the Ethereal Plane, all out to a range of 120 feet. + """ name = "True Seeing" @@ -840,6 +881,7 @@ class TrueStrike(Spell): you a brief insight into the target's defenses. On your next turn, you gain advantage on your first attack roll against the target, provided that this spell hasn't ended. + """ name = "True Strike" @@ -877,6 +919,7 @@ class Tsunami(Spell): wave, though, the creature must make a successful Strength (Athletics) check against your spell save DC in order to move at all. If it fails the check, it can't move. A creature that moves out of the area falls to the ground. + """ name = "Tsunami" diff --git a/dungeonsheets/spells/spells_u.py b/dungeonsheets/spells/spells_u.py index d7bc0d84..dbb2c64d 100644 --- a/dungeonsheets/spells/spells_u.py +++ b/dungeonsheets/spells/spells_u.py @@ -9,7 +9,7 @@ class UnseenServant(Spell): ends. Once on each of your turns as a bonus action, you can mentally command - the servant to move up to 15 feet and inteact with an object. The servant can + the servant to move up to 15 feet and interact with an object. The servant can perform simple tasks that a human servant could do, such as fetching things, cleaning, mending, folding clothes, lighting fires, serving food, and pouring wine. Once you give the command, the servant performs the task to the best of @@ -18,6 +18,7 @@ class UnseenServant(Spell): If you command the servant to perform a task that would move it more than 60 feet away from you, the spell ends. + """ name = "Unseen Servant" diff --git a/dungeonsheets/spells/spells_v.py b/dungeonsheets/spells/spells_v.py index b3ccbfce..c1298778 100644 --- a/dungeonsheets/spells/spells_v.py +++ b/dungeonsheets/spells/spells_v.py @@ -11,6 +11,7 @@ class VampiricTouch(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 3rd. + """ name = "Vampiric Touch" @@ -35,6 +36,7 @@ class ViciousMockery(Spell): **At Higher Levels:** This spell's damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4). + """ name = "Vicious Mockery" @@ -60,6 +62,7 @@ class VitriolicSphere(Spell): **At Higher Levels:** When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. + """ name = "Vitriolic Sphere" diff --git a/dungeonsheets/spells/spells_w.py b/dungeonsheets/spells/spells_w.py index 08586071..ae62cf38 100644 --- a/dungeonsheets/spells/spells_w.py +++ b/dungeonsheets/spells/spells_w.py @@ -42,7 +42,7 @@ class WallOfForce(Spell): be free floating or resting on a solid surface. You can form it into a hemispherical dome or a sphere with a radius of up to 10 feet, or you can shape a flat surface made up of ten - 10-foot-by-10-foot panels. Each panel must be continguous with + 10-foot-by-10-foot panels. Each panel must be contiguous with another panel. In any form, the wall is 1/4 inch thick. It lasts for the duration. If the wall cuts through a creature's space when it appears, the creature is pushed to one side of the wall (your @@ -71,7 +71,7 @@ class WallOfForce(Spell): class WallOfIce(Spell): """You create a wall of ice on a solid surface within range. You can form it into a hemispherical dome or a sphere with radius of up to - 10 feet, or you can shape a flat surfcae made up of ten + 10 feet, or you can shape a flat surface made up of ten 10-foot-square panels. Each panel must be contiguous with another panel. In any form, the wall is 1 foot thick and lasts for the duration. @@ -88,7 +88,7 @@ class WallOfIce(Spell): hit points destroys it and leaves behind a sheet of frigid air int he space the wall occupied. A creature moving through the sheet of frigid air for the first time on a turn must make a Constitution - saaving throw. The creature takes 5f6 cold damage on a failed + saving throw. The creature takes 5f6 cold damage on a failed save, or half as much damage on a successful one. **At Higher Levels:** When you cast this spell using a spell slot @@ -159,6 +159,7 @@ class WallOfSand(Spell): feet thick, and it vanishes when the spell ends. It blocks line of sight but not movement. A creature is blinded while in the wall's space and must spend 3 feet of movement for every 1 foot it moves there. + """ name = "Wall Of Sand" @@ -176,7 +177,7 @@ class WallOfSand(Spell): class WallOfStone(Spell): """A nonmagical wall of solid stone springs into existence at a point you choose within range. The wall is 6 inches thick and is - composed of ten 10-foot- by-10-foot panels. Each panel must be + composed of ten 10-foot-by-10-foot panels. Each panel must be contiguous with at least on other panel. Alternatively, you can create 10-foot-by-20-foot panels that are only 3 inches thick. @@ -238,9 +239,10 @@ class WallOfThorns(Spell): ends its turn there, the creature must make a Dexterity saving throw. It takes 7d8 slashing damage on a failed save, or half as much on a successful save. - At - Higher Levels: When you cast this spell using a spell slot of 7th level or + **At + Higher Levels:** When you cast this spell using a spell slot of 7th level or higher, both types of damage increase by 1d8 for each slot level above 6th. + """ name = "Wall Of Thorns" @@ -256,8 +258,7 @@ class WallOfThorns(Spell): class WallOfWater(Spell): - """(a drop of water) - + """ You conjure up a wall of water on the ground at a point you can see within range. You can make the wall up to 30 feet long, 10 feet high, and 1 foot thick, or you can make a ringed wall up to @@ -282,7 +283,7 @@ class WallOfWater(Spell): casting_time = "1 action" casting_range = "60 feet" components = ("V", "S", "M") - materials = "" + materials = "A drop of water" duration = "Instantaneous" ritual = False magic_school = "Evocation" @@ -302,6 +303,7 @@ class WardingBond(Spell): become separated by more than 60 feet. It also ends if the spell is cast again on either of the connected creatures. You can also dismiss the spell as an action. + """ name = "Warding Bond" @@ -353,6 +355,7 @@ class WaterBreathing(Spell): """This spell grants up to ten willing creatures you can see within range the ability to breathe underwater until the spell ends. Affected creatures also retain their normal mode of respiration. + """ name = "Water Breathing" @@ -374,9 +377,9 @@ class WaterWalk(Spell): Up to ten willing creatures you can see within range gain this ability for the duration. - If you target a creature submerged in a liquid, the spell carries the target to the surface of the liquid at a rate of 60 feet per round. + """ name = "Water Walk" @@ -547,26 +550,23 @@ class Whirlwind(Spell): class WildCunning(Spell): """You call out to the spirits of nature to aid you. When you cast this spell, choose one of the following effects: - -- If there are any tracks on the ground within range, you know where they - are, and you make Wisdom (Survival) checks to follow these tracks with - advantage for 1 hour or until you cast this spell again. - -- If there is edible forage within range, you know it and where to find - it. + - If there are any tracks on the ground within range, you know where they + are, and you make Wisdom (Survival) checks to follow these tracks with + advantage for 1 hour or until you cast this spell again. + - If there is edible forage within range, you know it and where to find + it. + - If there is clean drinking water within range, you know it and where to + find it. + - If there is suitable shelter for you and your companions with range, you + know it and where to find it. + - Send the spirits to bring back wood for a fire and to set up a campsite + in the area using your supplies. The spirits build the fire in a circle of + stones, put up tents, unroll bedrolls, and put out any rations and water + for consumption. + - Have the spirits instantly break down a campsite, which includes putting + out a fire, taking down tents, packing up bags, and burying any rubbish. - -- If there is clean drinking water within range, you know it and where to - find it. - - -- If there is suitable shelter for you and your companions with range, you - know it and where to find it. - - -- Send the spirits to bring back wood for a fire and to set up a campsite - in the area using your supplies. The spirits build the fire in a circle of - stones, put up tents, unroll bedrolls, and put out any rations and water - for consumption. - - -- Have the spirits instantly break down a campsite, which includes putting - out a fire, taking down tents, packing up bags, and burying any rubbish. """ name = "Wild Cunning" @@ -799,22 +799,31 @@ class WrathOfNature(Spell): a point you can see within range. The spirits cause trees, rocks, and grasses in a 60-foot cube centered on that point to become animated until the spell ends. - Grasses and Undergrowth. Any area of ground in the cube that is covered by - grass or undergrowth is difficult terrain for your enemies. - Trees. At the start - of each of your turns, each of your enemies within 10 feet of any tree in the - cube must succeed on a Dexterity saving throw or take 4d6 slashing damage from - whipping branches. - Roots and Vines. At the end of each of your turns, one - creature of your choice that is on the ground in the cube must succeed on a - Strength saving throw or become restrained until the spell ends. A restrained - creature can use an action to make a Strength (Athletics) check against your - spell save DC, ending the effect on itself on a success. - Rocks. As a bonus - action on your turn, you can cause a loose rock in the cube to launch at a - creature you can see in the cube. Make a ranged spell attack against the target. - On a hit, the target takes 3d8 nonmagical bludgeoning damage, and it must - succeed on a Strength saving throw or fall prone. + + Grasses and Undergrowth. + Any area of ground in the cube that is covered by + grass or undergrowth is difficult terrain for your enemies. + + Trees. + At the start + of each of your turns, each of your enemies within 10 feet of any tree in the + cube must succeed on a Dexterity saving throw or take 4d6 slashing damage from + whipping branches. + + Roots and Vines. + At the end of each of your turns, one + creature of your choice that is on the ground in the cube must succeed on a + Strength saving throw or become restrained until the spell ends. A restrained + creature can use an action to make a Strength (Athletics) check against your + spell save DC, ending the effect on itself on a success. + + Rocks. + As a bonus + action on your turn, you can cause a loose rock in the cube to launch at a + creature you can see in the cube. Make a ranged spell attack against the target. + On a hit, the target takes 3d8 nonmagical bludgeoning damage, and it must + succeed on a Strength saving throw or fall prone. + """ name = "Wrath Of Nature" @@ -836,6 +845,7 @@ class WrathfulSmite(Spell): saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. + """ name = "Wrathful Smite" @@ -855,10 +865,12 @@ class Wristpocket(Spell): The object, which only you can be holding and can weigh no more than 5 pounds, is transported to an extradimensional space, where it remains for the duration. + Until the spell ends, you can use your action to summon the object to your free hand, and you can use your action to return the object to the extradimensional space. An object still in the pocket plane when the spell ends appears in your space, at your feet. + """ name = "Wristpocket" diff --git a/dungeonsheets/spells/spells_z.py b/dungeonsheets/spells/spells_z.py index 7f2fe8c8..5668a65a 100644 --- a/dungeonsheets/spells/spells_z.py +++ b/dungeonsheets/spells/spells_z.py @@ -4,10 +4,12 @@ class ZephyrStrike(Spell): """You move like the wind. Until the spell ends, your movement doesn't provoke opportunity attacks. + Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. + """ name = "Zephyr Strike" @@ -25,6 +27,7 @@ class ZephyrStrike(Spell): class ZoneOfTruth(Spell): """You create a magical zone that guards against deception in a 15-foot-radius sphere centered on a point of your choice within range. + Until the spell ends, a creature that enters the spell's area for the first time on a turn or starts its turn there must make a Charisma saving throw. On a failed save, a creature @@ -35,6 +38,7 @@ class ZoneOfTruth(Spell): spell and can thus avoid answering questions to which it would normally respond with a lie. Such creatures can be evasive in its answers as long as it remains within the boundaries of the truth. + """ name = "Zone Of Truth" diff --git a/examples/bloodhunter1.py b/examples/bloodhunter1.py index 7e422d9f..0a550aa0 100644 --- a/examples/bloodhunter1.py +++ b/examples/bloodhunter1.py @@ -16,7 +16,7 @@ # Be sure to list Primary class first classes = ['Blood hunter'] # ex: ['Wizard'] or ['Rogue', 'Fighter'] levels = [15] # ex: [10] or [3, 2] -subclasses = ["Order of the Ghostslayer"] # ex: ['Necromancy'] or ['Thief', None] +subclasses = ["Order of the Profane Soul"] # ex: ['Necromancy'] or ['Thief', None] background = "Pirate" race = "Human" alignment = "Neutral good" @@ -46,14 +46,14 @@ # Gunslinger, etc.) # Example: # features = ('Tavern Brawler',) # take the optional Feat from PHB -features = ('commanders strike', 'disarming attack', 'distracting strike', - 'evasive footwork', 'rally', 'parry', 'sweeping attack', - 'lunging attack') +features = ('rite of the frozen', 'rite of the storm', 'rite of the oracle', + 'blood curse of the anxious', 'blood curse of binding', + 'blood curse of the fallen puppet', 'blood curse of the muddled mind',) # If selecting among multiple feature options: ex Fighting Style # Example (Fighting Style): # feature_choices = ('Archery',) -feature_choices = () +feature_choices = ('great-weapon fighting', 'undying',) # Weapons/other proficiencies not given by class/race/background weapon_proficiencies = () # ex: ('shortsword', 'quarterstaff') diff --git a/pyproject.toml b/pyproject.toml index 86f20669..d7676785 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,12 +10,12 @@ authors = [ ] description = "Dungeons and Dragons 5e Character Tools" readme = "README.rst" -license = {"file"= "LICENSE"} +license = "GPL-3.0-or-later" +license-files = ["LICENSE"] requires-python = ">=3.9" classifiers = [ "Development Status :: 3 - Alpha", "Environment :: Console", - "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Natural Language :: English", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", @@ -39,12 +39,20 @@ Homepage = "https://github.com/canismarko/dungeon-sheets" [tool.setuptools.package-data] dungeonsheets = [ - "forms/*pdf", + "forms/*.html", + "forms/*.pdf", "forms/*.tex", "forms/*.txt", "modules/DND-5e-LaTeX-Template/*", "modules/DND-5e-LaTeX-Template/lib/*", "modules/DND-5e-LaTeX-Template/img/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/template/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/template/fonts/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/template/character-sheet/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/template/background-sheet/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/template/half-spell-sheet/*", + "modules/DND-5e-LaTeX-Character-Sheet-Template/template/spell-sheet/*", ] [tool.setuptools_scm] diff --git a/tests/test_character.py b/tests/test_character.py index 40b857c1..ccd98f8d 100644 --- a/tests/test_character.py +++ b/tests/test_character.py @@ -189,6 +189,35 @@ def test_proficiencies_by_type(self): char.proficiencies_by_type["Weapons"].lower() + char.proficiencies_by_type["Other"].lower()) + def test_features_by_type(self): + char = Character( + classes=["Fighter", "Sorcerer"], + subclasses=["Gunslinger", "Divine Soul"], + levels=[15, 5], + race="Protector Aasimar", + features = ("Bullying Shot", "Disarming Shot", "Forceful Shot", "Violent Shot", + "Winging Shot", "Twinned Spell", "Empowered Spell", "resilient", "turn undead"), + feature_choices = ("great-weapon fighting",), + background = "Pirate" + ) + assert str(char.features_by_type["Feats"][0]) == "Resilient" + feats = "\n".join([str(feat) for feat in char.features_by_type["Class Features"]]) + e = ( + "Channel Divinity: Turn Undead\nFighting Style (Great Weapon Fighting)\nSecond Wind\n" + "Action Surge\nGunsmith\nAdept Marksman\nBullying Shot\n" + "Disarming Shot\nForceful Shot\nViolent Shot\nWinging Shot\n" + "Extra Attack (3x)\nQuick Draw\nIndomitable (2x/LR)\nRapid Repair\nLightning Repaid\n" + "Divine Magic\nFavored by the Gods\nFont of Magic\nMetamagic\nTwinned Spell\n" + "Empowered Spell" + ) + assert(feats == e) + feats = "\n".join([str(feat) for feat in char.features_by_type["Racial Features"]]) + e = ( + "Darkvision (60')\nCelestial Resistance\nHealing Hands\n" + "Light Bearer\nAasimar Radiant Soul" + ) + assert str(char.features_by_type["Background Features"][0]) == "Ship\'s Passage" + def test_proficiency_bonus(self): char = Character() char.level = 1 @@ -247,14 +276,21 @@ def test_wield_shield(self): # Try passing an Armor object directly char.wield_shield(Shield) self.assertEqual(char.armor_class, 15) - + def test_carrying_weight(self): + class HeavyRing(MagicItem): + weight = 20 + + class DullSword(Weapon, MagicItem): + weight = 10 + char = Character(race="lightfoot halfling", strength=12) # Check carrying capacity self.assertEqual(char.carrying_capacity, 180) # Check the armor weight is included char.wear_armor(LeatherArmor()) self.assertEqual(char.carrying_weight, 10) + self.assertEqual(char.weight_and_capacity_text, "**Weight:** 10 lb **Capacity:** 180 lb") # Check the shield weight is included char = Character() char.wield_shield("shield") @@ -267,7 +303,9 @@ def test_carrying_weight(self): # Check the listed equipment is included char = Character() char.equipment = "blanket, crowbar" - self.assertEqual(char.carrying_weight, 8) + char.magic_items = [HeavyRing, DullSword] + char.wield_weapon(DullSword) + self.assertEqual(char.carrying_weight, 38) def test_speed(self): # Check that the speed pulls from the character's race @@ -366,9 +404,9 @@ class Beast(monsters.Monster): not_beast = monsters.Monster() not_beast.description = "monster" self.assertFalse(low_druid.can_assume_shape(not_beast)) - + class BeastMasterTestCase(TestCase): - + def test_ranger_beast(self): char = Ranger(6, subclasses = ["Beast Master"]) char.ranger_beast = "Panther" @@ -386,6 +424,3 @@ def test_ranger_beast(self): char = Ranger(3, subclasses = ["Beast Master"]) char.ranger_beast = "Panther" self.assertEqual(char.ranger_beast.hp_max, 13) - - -