mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-19 04:33:26 +02:00
Cleaned up the PDF for GM monster stats.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
\DndMonsterBasics[
|
||||
armor-class = {[[ monster.armor_class ]]},
|
||||
hit-points = {[[ monster.hp_max ]] ([[ monster.hit_dice ]])},
|
||||
speed = {[[ monster.speed ]] ft.[% if monster.swim_speed %], [[ monster.swim_speed ]]ft. swim[% endif %][% if monster.fly_speed %], [[ monster.fly_speed ]] ft. fly[% endif %]},
|
||||
speed = {[[ monster.speed ]] ft.[% if monster.swim_speed %], [[ monster.swim_speed ]] ft. swim[% endif %][% if monster.fly_speed %], [[ monster.fly_speed ]] ft. fly[% endif %][% if monster.burrow_speed %], [[ monster.burrow_speed ]] ft. burrow[% endif %]},
|
||||
]
|
||||
|
||||
\DndMonsterAbilityScores[
|
||||
@@ -22,16 +22,16 @@
|
||||
]
|
||||
|
||||
\DndMonsterDetails[
|
||||
%saving-throws = {Str +0, Dex +0, Con +0, Int +0, Wis +0, Cha +0},
|
||||
skills = {[[ monster.skills ]]},
|
||||
%damage-vulnerabilities = {cold},
|
||||
damage-resistances = {[[ monster.damage_resistance ]]},
|
||||
%damage-immunities = {poison},
|
||||
condition-immunities = {[[ monster.condition_immunities ]]},
|
||||
senses = {[[ monster.senses ]]},
|
||||
languages = {[% if monster.languages %][[ monster.languages ]][% else %] --- [% endif %]},
|
||||
challenge = {[[ monster.challenge_rating ]]},
|
||||
]
|
||||
saving-throws = {[[ monster.saving_throws ]]},
|
||||
skills = {[[ monster.skills ]]},
|
||||
damage-vulnerabilities = {[[ monster.damage_vulnerabilities ]]},
|
||||
damage-resistances = {[[ monster.damage_resistances ]]},
|
||||
damage-immunities = {[[ monster.damage_immunities ]]},
|
||||
condition-immunities = {[[ monster.condition_immunities ]]},
|
||||
senses = {[[ monster.senses ]]},
|
||||
languages = {[% if monster.languages %][[ monster.languages ]][% else %] --- [% endif %]},
|
||||
challenge = {[[ monster.challenge_rating ]]},
|
||||
]
|
||||
%\DndMonsterSection{Actions}
|
||||
[[ monster.__doc__ | rst_to_latex(top_heading_level=2) ]]
|
||||
\end{DndMonster}
|
||||
@@ -45,7 +45,7 @@
|
||||
\subsection*{[[ monster.description ]]}
|
||||
[% endif %]
|
||||
|
||||
\begin{tabular}{c | c | c}
|
||||
\begin{tabular}{c c c}
|
||||
Armor Class & Hit Points & Speed \\
|
||||
\hline
|
||||
[[ monster.armor_class ]] &
|
||||
@@ -57,31 +57,38 @@
|
||||
[% if monster.fly_speed %]
|
||||
& & [[ monster.fly_speed ]] fly \\
|
||||
[% endif %]
|
||||
|
||||
[% if monster.burrow_speed %]
|
||||
& & [[ monster.burrow_speed ]] burrow \\
|
||||
[% endif %]
|
||||
\end{tabular}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\begin{tabular}{c | c | c}
|
||||
STR & DEX & CON \\
|
||||
\begin{tabular}{c c c c c c}
|
||||
STR & DEX & CON & INT & WIS & CHA \\
|
||||
\hline
|
||||
[[ monster.strength.value ]] ([[ monster.strength.modifier|mod_str ]]) &
|
||||
[[ monster.dexterity.value ]] ([[ monster.dexterity.modifier|mod_str ]]) &
|
||||
[[ monster.constitution.value ]] ([[ monster.constitution.modifier|mod_str ]]) \\
|
||||
[[ monster.strength.value ]] & [[ monster.dexterity.value ]] & [[ monster.constitution.value ]] &
|
||||
[[ monster.intelligence.value ]] & [[ monster.wisdom.value ]] & [[ monster.charisma.value ]] \\
|
||||
([[ monster.strength.modifier|mod_str ]]) & ([[ monster.dexterity.modifier|mod_str ]]) &
|
||||
([[ monster.constitution.modifier|mod_str ]]) & ([[ monster.intelligence.modifier|mod_str ]]) &
|
||||
([[ monster.wisdom.modifier|mod_str ]]) & ([[ monster.charisma.modifier|mod_str ]]) \\
|
||||
\end{tabular}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
\begin{tabular}{p{0.1\textwidth} p{0.32\textwidth}}
|
||||
\textbf{Skills:} & [[ monster.skills ]] \\
|
||||
\textbf{Senses:} & [[ monster.senses ]] \\
|
||||
\textbf{Languages:} & [[ monster.languages ]] \\
|
||||
\textbf{Resistance:} & [[ monster.damage_resistance ]] \\
|
||||
\textbf{Immunities:} & [[ monster.condition_immunities ]] \\
|
||||
\end{tabular}
|
||||
\begin{description}
|
||||
\item [Senses:] [% if monster.senses != "" %][[ monster.senses ]][% else %]--[% endif %]
|
||||
\item [Languages:] [% if monster.languages != "" %][[ monster.languages ]][% else %]--[% endif %]
|
||||
[% if monster.damage_resistances != "" %]\item [Damage Resistances:] [[ monster.damage_resistances ]][% endif %]
|
||||
[% if monster.damage_immunities != "" %]\item [Damage Immunities:] [[ monster.damage_immunities ]][% endif %]
|
||||
[% if monster.damage_vulnerabilities != "" %]\item [Damage Vulnerabilities:] [[ monster.damage_vulnerabilities ]][% endif %]
|
||||
[% if monster.condition_immunities != "" %]\item [Condition Immunuties:] [[ monster.condition_immunities ]][% endif %]
|
||||
[% if monster.saving_throws != "" %]\item [Saving Throws:] [[ monster.saving_throws ]][% endif %]
|
||||
\item [Challenge:] [[ monster.challenge_rating ]]
|
||||
\end{description}
|
||||
|
||||
\vspace{0.2cm}
|
||||
|
||||
|
||||
[[ monster.__doc__ | rst_to_latex(top_heading_level=2) ]]
|
||||
|
||||
} %\color
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
\section*{Party}
|
||||
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}[header=Nice Table]{l c c c c c c c c}
|
||||
\begin{DndTable}{r c c c c c c c c}
|
||||
& AC & Str & Dex & Con & Int & Wis & Cha \\
|
||||
[% for member in party %]
|
||||
[[ member.name[:14] ]]
|
||||
@@ -16,7 +16,7 @@
|
||||
[% endfor %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\begin{tabular}{l | c c c c c c c}
|
||||
\begin{tabular}{r | c c c c c c c}
|
||||
& AC & Str & Dex & Con & Int & Wis & Cha \\
|
||||
\hline\hline
|
||||
[% for member in party %]
|
||||
|
||||
@@ -9,7 +9,7 @@ import re
|
||||
from pathlib import Path
|
||||
from multiprocessing import Pool, cpu_count
|
||||
from itertools import product
|
||||
from typing import Union, Mapping, Sequence, Optional
|
||||
from typing import Union, Sequence, Optional
|
||||
|
||||
from jinja2 import Environment, PackageLoader
|
||||
|
||||
@@ -93,7 +93,7 @@ def create_monsters_tex(
|
||||
def create_party_summary_tex(
|
||||
party: Sequence[Entity],
|
||||
use_dnd_decorations: bool = False,
|
||||
) -> str:
|
||||
) -> str:
|
||||
template = jinja_env.get_template("party_summary_template.tex")
|
||||
return template.render(party=party, use_dnd_decorations=use_dnd_decorations)
|
||||
|
||||
@@ -211,7 +211,24 @@ def make_gm_sheet(
|
||||
create_party_summary_tex(party, use_dnd_decorations=fancy_decorations)
|
||||
)
|
||||
# Add the monsters
|
||||
monsters_ = [findattr(monsters, m)() for m in gm_props.get("monsters", [])]
|
||||
monsters_ = []
|
||||
for monster in gm_props.get("monsters", []):
|
||||
if isinstance(monster, monsters.Monster):
|
||||
# It's already a monster, so just add it
|
||||
new_monster = monster
|
||||
else:
|
||||
try:
|
||||
MyMonster = findattr(monsters, monster)
|
||||
except AttributeError:
|
||||
msg = (
|
||||
f"Monster '{monster}' not found. Please add it to"
|
||||
" ``monsters.py``"
|
||||
)
|
||||
warnings.warn(msg)
|
||||
continue
|
||||
else:
|
||||
new_monster = MyMonster()
|
||||
monsters_.append(new_monster)
|
||||
if len(monsters_) > 0:
|
||||
tex.append(
|
||||
create_monsters_tex(monsters_, use_dnd_decorations=fancy_decorations)
|
||||
|
||||
@@ -14,12 +14,18 @@ class Monster(Entity):
|
||||
description = ""
|
||||
challenge_rating = 0
|
||||
skills = "Perception +3, Stealth +4"
|
||||
damage_resistances = ""
|
||||
damage_immunities = ""
|
||||
damane_vulnerabilities = ""
|
||||
condition_immunities = ""
|
||||
saving_throws = ""
|
||||
# TODO: Consider refactoring stats.Speed to consider all of these
|
||||
# just like we do stats.Ability
|
||||
|
||||
swim_speed = 0
|
||||
fly_speed = 0
|
||||
climb_speed = 0
|
||||
burrow_speed = 0
|
||||
hp_max = 10
|
||||
hit_dice = "1d6"
|
||||
|
||||
|
||||
@@ -9,21 +9,51 @@ from dungeonsheets.stats import Ability
|
||||
|
||||
|
||||
class Aboleth(Monster):
|
||||
"""
|
||||
**Amphibious**: The aboleth can breathe air and water.
|
||||
"""Amphibious
|
||||
The aboleth can breathe air and water.
|
||||
Mucous Cloud
|
||||
While underwater, the aboleth is surrounded by transformative
|
||||
mucus. A creature that touches the aboleth or that hits it with
|
||||
a melee attack while within 5 ft. of it must make a DC 14
|
||||
Constitution saving throw. On a failure, the creature is
|
||||
diseased for 1d4 hours. The diseased creature can breathe only
|
||||
underwater.
|
||||
Probing Telepathy
|
||||
If a creature communicates telepathically with the aboleth, the
|
||||
aboleth learns the creature's greatest desires if the aboleth
|
||||
can see the creature.
|
||||
Multiattack
|
||||
The aboleth makes three tentacle attacks.
|
||||
Tentacle
|
||||
Melee Weapon Attack: +9 to hit, reach 10 ft., one target. Hit:
|
||||
12 (2d6 + 5) bludgeoning damage. If the target is a creature, it
|
||||
must succeed on a DC 14 Constitution saving throw or become
|
||||
diseased. The disease has no effect for 1 minute and can be
|
||||
removed by any magic that cures disease. After 1 minute, the
|
||||
diseased creature's skin becomes translucent and slimy, the
|
||||
creature can't regain hit points unless it is underwater, and
|
||||
the disease can be removed only by heal or another
|
||||
disease-curing spell of 6th level or higher. When the creature
|
||||
is outside a body of water, it takes 6 (1d12) acid damage every
|
||||
10 minutes unless moisture is applied to the skin before 10
|
||||
minutes have passed.
|
||||
Tail
|
||||
Melee Weapon Attack: +9 to hit, reach 10 ft. one target. Hit: 15
|
||||
(3d6 + 5) bludgeoning damage.
|
||||
Enslave
|
||||
The aboleth targets one creature it can see within 30 ft. of
|
||||
it. The target must succeed on a DC 14 Wisdom saving throw or be
|
||||
magically charmed by the aboleth until the aboleth dies or until
|
||||
it is on a different plane of existence from the target. The
|
||||
charmed target is under the aboleth's control and can't take
|
||||
reactions, and the aboleth and the target can communicate
|
||||
telepathically with each other over any distance.
|
||||
|
||||
Whenever the charmed target takes damage, the target can repeat
|
||||
the saving throw. On a success, the effect ends. No more than
|
||||
once every 24 hours, the target can also repeat the saving throw
|
||||
when it is at least 1 mile away from the aboleth.
|
||||
|
||||
**Mucous Cloud**: While underwater, the aboleth is surrounded by transformative mucus. A creature that touches the aboleth or that hits it with a melee attack while within 5 ft. of it must make a DC 14 Constitution saving throw. On a failure, the creature is diseased for 1d4 hours. The diseased creature can breathe only underwater.
|
||||
|
||||
**Probing Telepathy**: If a creature communicates telepathically with the aboleth, the aboleth learns the creature's greatest desires if the aboleth can see the creature.
|
||||
|
||||
**Multiattack**: The aboleth makes three tentacle attacks.
|
||||
|
||||
**Tentacle**: Melee Weapon Attack: +9 to hit, reach 10 ft., one target. Hit: 12 (2d6 + 5) bludgeoning damage. If the target is a creature, it must succeed on a DC 14 Constitution saving throw or become diseased. The disease has no effect for 1 minute and can be removed by any magic that cures disease. After 1 minute, the diseased creature's skin becomes translucent and slimy, the creature can't regain hit points unless it is underwater, and the disease can be removed only by heal or another disease-curing spell of 6th level or higher. When the creature is outside a body of water, it takes 6 (1d12) acid damage every 10 minutes unless moisture is applied to the skin before 10 minutes have passed.
|
||||
|
||||
**Tail**: Melee Weapon Attack: +9 to hit, reach 10 ft. one target. Hit: 15 (3d6 + 5) bludgeoning damage.
|
||||
|
||||
**Enslave**: The aboleth targets one creature it can see within 30 ft. of it. The target must succeed on a DC 14 Wisdom saving throw or be magically charmed by the aboleth until the aboleth dies or until it is on a different plane of existence from the target. The charmed target is under the aboleth's control and can't take reactions, and the aboleth and the target can communicate telepathically with each other over any distance.
|
||||
Whenever the charmed target takes damage, the target can repeat the saving throw. On a success, the effect ends. No more than once every 24 hours, the target can also repeat the saving throw when it is at least 1 mile away from the aboleth.
|
||||
"""
|
||||
|
||||
name = "Aboleth"
|
||||
@@ -48,15 +78,20 @@ class Aboleth(Monster):
|
||||
|
||||
|
||||
class Acolyte(Monster):
|
||||
"""
|
||||
**Spellcasting**: The acolyte is a 1st-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 12, +4 to hit with spell attacks). The acolyte has following cleric spells prepared:
|
||||
"""Spellcasting
|
||||
|
||||
The acolyte is a 1st-level spellcaster. Its spellcasting ability
|
||||
is Wisdom (spell save DC 12, +4 to hit with spell attacks). The
|
||||
acolyte has following cleric spells prepared:
|
||||
|
||||
- Cantrips (at will): light, sacred flame, thaumaturgy
|
||||
- 1st level (3 slots): bless, cure wounds, sanctuary
|
||||
|
||||
**Club**: Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage.
|
||||
"""
|
||||
Club
|
||||
Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 2
|
||||
(1d4) bludgeoning damage.
|
||||
|
||||
"""
|
||||
name = "Acolyte"
|
||||
description = "Medium humanoid, any alignment"
|
||||
challenge_rating = 0.25
|
||||
|
||||
@@ -425,17 +425,88 @@ class BlackDragonWyrmling(Monster):
|
||||
hit_dice = "6d8"
|
||||
|
||||
|
||||
# PotA
|
||||
class BlackEarthPriest(Monster):
|
||||
"""Spellcasting.
|
||||
The priest is a 5th-level spellcaster. Its spellcasting ability
|
||||
is Charisma (spell save DC 13, +5 to hit with spell attacks). It
|
||||
knows the following sorcerer spells (an asterisked spell is from
|
||||
*Princes of the Apocalypse* appendix B):
|
||||
Cantrips (at will):
|
||||
acid splash, blade ward, light, mending, mold earth*
|
||||
1st level (4 slots):
|
||||
earth tremor,* expeditious retreat, shield
|
||||
2nd level (3 slots):
|
||||
shatter, spider climb
|
||||
3rd level (2 slots):
|
||||
slow
|
||||
Multiattack.
|
||||
The priest makes two melee attacks.
|
||||
Glaive.
|
||||
*Melee Weapon Attack:* +4 to hit, reach 10 ft., one
|
||||
target. *Hit:* 7 (1d10 + 2) slashing damage.
|
||||
Unyielding.
|
||||
When the priest is subjected to an effect that would move it,
|
||||
knock it prone, or both, it can use its reaction to be neither
|
||||
moved nor knocked prone.
|
||||
|
||||
The priests of the Black Earth are drivers and organizers of
|
||||
Ogrémoch's cult. They are the true believers, seeing Ogrémoch as a
|
||||
divine force, and they have developed a twisted dogma to explain
|
||||
how the evil of elemental earth is destined to remake the world
|
||||
and rule over all. The Black Earth priests form a cabal of leaders
|
||||
whose fanaticism and magical power serve as the backbone of the
|
||||
cult. Individuals ofunusual power hold higher rank in the cult,
|
||||
but the priests provide the cult leader with his or her authority
|
||||
over the rest of Ogrémoch's followers.
|
||||
|
||||
"""
|
||||
name = "Black Earth Priest"
|
||||
description = "Medium humanoid (human), neutral evil"
|
||||
challenge_rating = 3
|
||||
armor_class = 17
|
||||
skills = "Intimidation +5, Religion +3, Persuasion +5"
|
||||
senses = "passive Perception 10"
|
||||
languages = "Common, Terran"
|
||||
strength = Ability(15)
|
||||
dexterity = Ability(11)
|
||||
constitution = Ability(14)
|
||||
intelligence = Ability(12)
|
||||
wisdom = Ability(10)
|
||||
charisma = Ability(16)
|
||||
speed = 30
|
||||
swim_speed = 0
|
||||
fly_speed = 0
|
||||
climb_speed = 0
|
||||
hp_max = 45
|
||||
hit_dice = "7d8 + 14"
|
||||
|
||||
|
||||
class BlackPudding(Monster):
|
||||
"""Amorphous.
|
||||
The pudding can move through a space as narrow as 1 inch wide without squeezing.
|
||||
Corrosive Form.
|
||||
A creature that touches the pudding or hits it with a melee
|
||||
attack while within 5 feet of it takes 4 (1d8) acid damage. Any
|
||||
nonmagical weapon made of metal or wood that hits the pudding
|
||||
corrodes. After dealing damage, the weapon takes a permanent and
|
||||
cumulative -1 penalty to damage rolls. If its penalty drops to
|
||||
-5, the weapon is destroyed. Nonmagical ammunition made of metal
|
||||
or wood that hits the pudding is destroyed after dealing
|
||||
damage. The pudding can eat through 2-inch-thick, nonmagical
|
||||
wood or metal in 1 round.
|
||||
Spider Climb.
|
||||
The pudding can climb difficult surfaces, including upside down
|
||||
on ceilings, without needing to make an ability check.
|
||||
Pseudopod.
|
||||
Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6
|
||||
(1d6 + 3) bludgeoning damage plus 18 (4d8) acid damage. In
|
||||
addition, nonmagical armor worn by the target is partly
|
||||
dissolved and takes a permanent and cumulative -1 penalty to the
|
||||
AC it offers. The armor is destroyed if the penalty reduces its
|
||||
AC to 10.
|
||||
|
||||
"""
|
||||
**Amorphous**: The pudding can move through a space as narrow as 1 inch wide without squeezing.
|
||||
|
||||
**Corrosive Form**: A creature that touches the pudding or hits it with a melee attack while within 5 feet of it takes 4 (1d8) acid damage. Any nonmagical weapon made of metal or wood that hits the pudding corrodes. After dealing damage, the weapon takes a permanent and cumulative -1 penalty to damage rolls. If its penalty drops to -5, the weapon is destroyed. Nonmagical ammunition made of metal or wood that hits the pudding is destroyed after dealing damage. The pudding can eat through 2-inch-thick, nonmagical wood or metal in 1 round.
|
||||
|
||||
**Spider Climb**: The pudding can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check.
|
||||
|
||||
**Pseudopod**: Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) bludgeoning damage plus 18 (4d8) acid damage. In addition, nonmagical armor worn by the target is partly dissolved and takes a permanent and cumulative -1 penalty to the AC it offers. The armor is destroyed if the penalty reduces its AC to 10.
|
||||
"""
|
||||
|
||||
name = "Black Pudding"
|
||||
description = "Large ooze, unaligned"
|
||||
challenge_rating = 4
|
||||
@@ -735,15 +806,81 @@ class Bugbear(Monster):
|
||||
hit_dice = "5d8"
|
||||
|
||||
|
||||
# PotA
|
||||
class Burrowshark(Monster):
|
||||
"""Elite warriors of the earth cult, burrowsharks are fierce champions
|
||||
who ride trained bulettes into battle. While their powerful mounts
|
||||
rend and tear foes to pieces, burrowsharks leap to the ground and
|
||||
cut down their foes without mercy.
|
||||
|
||||
Burrowsharks are much like Black Earth guards, since both have
|
||||
uncanny footing and special armor. For burrowsharks, an additional
|
||||
gift of Ogremoch's might establishes a magical bond between the
|
||||
burrowshark and a bulette, allowing the rider to burrow with its
|
||||
mount and sense what its mount senses.
|
||||
|
||||
Bond of the Black Earth
|
||||
The burrowshark is magically bound to a bulette trained to serve
|
||||
as its mount. While mounted on its bulette, the burrowshark
|
||||
shares the bulette's sense and can ride the bulette while it
|
||||
burrows. The bonded bulette obeys the burrowshark's commands. If
|
||||
its mount dies, the burrowshark can train a new bulette to serve
|
||||
as its bonded mount, a process requiring a month.
|
||||
Multiattack
|
||||
The burrowshark makes three melee attacks.
|
||||
Spear
|
||||
Melee or ranged weapon attack: +6 to hit, reach 5ft. or range
|
||||
20/60ft., one target. Hit: 7 (1d6+4) piercing damage, or 8
|
||||
(1d8+4) piercing damage if used with two hands to make a melee
|
||||
attack.
|
||||
Unyielding
|
||||
When the burrowshark is subjected to an effect that would move
|
||||
it, knock it prone, or both, it can use its reaction to be
|
||||
neither moved nor knocked prone.
|
||||
|
||||
"""
|
||||
name = "Burrowshark"
|
||||
description = "Medium humanoid (human), neutral evil"
|
||||
challenge_rating = 4
|
||||
armor_class = 18
|
||||
skills = "Animal handling +2, Athletics +6, Intimidation + 3, Perception +2"
|
||||
senses = "passive Perception 12"
|
||||
languages = "Common"
|
||||
strength = Ability(18)
|
||||
dexterity = Ability(12)
|
||||
constitution = Ability(16)
|
||||
intelligence = Ability(10)
|
||||
wisdom = Ability(11)
|
||||
charisma = Ability(13)
|
||||
speed = 30
|
||||
swim_speed = 0
|
||||
fly_speed = 0
|
||||
climb_speed = 0
|
||||
hp_max = 82
|
||||
hit_dice = "11d8+33"
|
||||
|
||||
|
||||
class Bulette(Monster):
|
||||
"""Standing Leap
|
||||
The bulette's long jump is up to 30 ft. and its high jump is up
|
||||
to 15 ft., with or without a running start.
|
||||
Bite
|
||||
Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 30
|
||||
(4d12 + 4) piercing damage.
|
||||
Deadly Leap
|
||||
If the bulette jumps at least 15 ft. as part of its movement, it
|
||||
can then use this action to land on its ft. in a space that
|
||||
contains one or more other creatures. Each of those creatures
|
||||
must succeed on a DC 16 Strength or Dexterity saving throw
|
||||
(target's choice) or be knocked prone and take 14 (3d6 + 4)
|
||||
bludgeoning damage plus 14 (3d6 + 4) slashing damage. On a
|
||||
successful save, the creature takes only half the damage, isn't
|
||||
knocked prone, and is pushed 5 ft. out of the bulette's space
|
||||
into an unoccupied space of the creature's choice. If no
|
||||
unoccupied space is within range, the creature instead falls
|
||||
prone in the bulette's space.
|
||||
|
||||
"""
|
||||
**Standing Leap**: The bulette's long jump is up to 30 ft. and its high jump is up to 15 ft., with or without a running start.
|
||||
|
||||
**Bite**: Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 30 (4d12 + 4) piercing damage.
|
||||
|
||||
**Deadly Leap**: If the bulette jumps at least 15 ft. as part of its movement, it can then use this action to land on its ft. in a space that contains one or more other creatures. Each of those creatures must succeed on a DC 16 Strength or Dexterity saving throw (target's choice) or be knocked prone and take 14 (3d6 + 4) bludgeoning damage plus 14 (3d6 + 4) slashing damage. On a successful save, the creature takes only half the damage, isn't knocked prone, and is pushed 5 ft. out of the bulette's space into an unoccupied space of the creature's choice. If no unoccupied space is within range, the creature instead falls prone in the bulette's space.
|
||||
"""
|
||||
|
||||
name = "Bulette"
|
||||
description = "Large monstrosity, unaligned"
|
||||
challenge_rating = 5
|
||||
@@ -762,4 +899,4 @@ class Bulette(Monster):
|
||||
fly_speed = 0
|
||||
climb_speed = 0
|
||||
hp_max = 94
|
||||
hit_dice = "9d10"
|
||||
hit_dice = "9d10+45"
|
||||
|
||||
@@ -8,6 +8,63 @@ from dungeonsheets.monsters.monsters import Monster
|
||||
from dungeonsheets.stats import Ability
|
||||
|
||||
|
||||
class Dao(Monster):
|
||||
"""Earth Glide.
|
||||
The dao can burrow through nonmagical unworked earth and
|
||||
stone. While doing so, the dao doesn't distrub the material it
|
||||
moves through.
|
||||
Elemental Demise.
|
||||
If the dao dies, its body disintegrates into crystalline powder,
|
||||
leaving behind only equipment the dao was wearing or carrying.
|
||||
Innate Spellcasting.
|
||||
The dao's innate spellcasting ability is Charisma (spell save DC
|
||||
14, +6 to hit with spell attacks). It can innately cast the
|
||||
following spells, requiring no material components:
|
||||
|
||||
At will: detect evil and good, detect magic, stone shape. 3/day
|
||||
each: passwall, move earth, tongues. 1/day each: conjure
|
||||
elemental (earth elemental only), gaseous form, invisibility,
|
||||
phantasmal killer, plane shift, wall of stone.
|
||||
Sure-Footed.
|
||||
The dao has advantage on Strength and Dexterity saving throws
|
||||
made against effects that would knock it prone.
|
||||
Multiattack.
|
||||
The dao makes two fist attacks or two maul attacks.
|
||||
Fist.
|
||||
*Melee weapon attack:* +10 to hit, reach 5ft., one
|
||||
target. *Hit:* 15 (2d8 + 6) bludgeoning damage.
|
||||
Maul.
|
||||
*Melee weapon attack:* +10 to hit, reach 5ft., one
|
||||
target. *Hit:* 20 (4d6 + 6) bludgeoning damage. If the target is
|
||||
a Huge or smaller creature, it must succeed on a DC 18 Strength
|
||||
check or be knocked prone.
|
||||
|
||||
"""
|
||||
name = "Dao"
|
||||
description = "Large elemental, neutral evil"
|
||||
challenge_rating = 11
|
||||
armor_class = 18
|
||||
skills = ""
|
||||
saving_throws = "Int +5, Wis +5, Cha +6"
|
||||
condition_immunities = "petrified"
|
||||
senses = "darkvision 120ft., passive Perception 11"
|
||||
languages = "Terran"
|
||||
strength = Ability(23)
|
||||
dexterity = Ability(12)
|
||||
constitution = Ability(24)
|
||||
intelligence = Ability(12)
|
||||
wisdom = Ability(13)
|
||||
charisma = Ability(14)
|
||||
speed = 30
|
||||
swim_speed = 0
|
||||
fly_speed = 30
|
||||
climb_speed = 0
|
||||
burrow_speed = 30
|
||||
hp_max = 187
|
||||
hit_dice = "15d10 + 105"
|
||||
|
||||
|
||||
|
||||
class Darkmantle(Monster):
|
||||
"""
|
||||
**Echolocation**: The darkmantle can't use its blindsight while deafened.
|
||||
|
||||
@@ -237,12 +237,19 @@ class Hippogriff(Monster):
|
||||
|
||||
|
||||
class Hobgoblin(Monster):
|
||||
"""
|
||||
**Martial Advantage**: Once per turn, the hobgoblin can deal an extra 7 (2d6) damage to a creature it hits with a weapon attack if that creature is within 5 ft. of an ally of the hobgoblin that isn't incapacitated.
|
||||
"""Martial Advantage.
|
||||
Once per turn, the hobgoblin can deal an extra 7 (2d6) damage to
|
||||
a creature it hits with a weapon attack if that creature is
|
||||
within 5 ft. of an ally of the hobgoblin that isn't
|
||||
incapacitated.
|
||||
Longsword.
|
||||
*Melee Weapon Attack:* +3 to hit, reach 5 ft., one target. *Hit:*
|
||||
5 (1d8+1) slashing damage, or 6 (1d10+1) slashing damage if
|
||||
used with two hands.
|
||||
Longbow.
|
||||
*Ranged Weapon Attack:* +3 to hit, range 150/600 ft., one
|
||||
target. *Hit:* 5 (1d8+1) piercing damage.
|
||||
|
||||
**Longsword**: Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 5 (1d8 + 1) slashing damage, or 6 (1d10 + 1) slashing damage if used with two hands.
|
||||
|
||||
**Longbow**: Ranged Weapon Attack: +3 to hit, range 150/600 ft., one target. Hit: 5 (1d8 + 1) piercing damage.
|
||||
"""
|
||||
|
||||
name = "Hobgoblin"
|
||||
|
||||
@@ -299,6 +299,47 @@ class Shadow(Monster):
|
||||
hit_dice = "3d8"
|
||||
|
||||
|
||||
class ShadowDemon(Monster):
|
||||
"""Incorporeal Movement.
|
||||
The demon can move through other creatures and objects as if
|
||||
they were difficult terrain. It takes 5 (1d10) force damage if
|
||||
it ends its turn inside an object.
|
||||
Light Sensitivity.
|
||||
While in bright light, the demon has disadvantage on attack
|
||||
rolls, as well as on Wisdom (Perception) checks that rely on
|
||||
sight.
|
||||
Shadow Stealth.
|
||||
While in dim light or darkness, the demon can take the Hide
|
||||
action as a bonus action.
|
||||
Claws.
|
||||
*Melee Weapon Attack:* +5 to hit, reach 5ft., one
|
||||
creature. *Hit:* 10 (2d6+3) psychic damage or, if the demon
|
||||
had advantage on the attack roll, 17 (4d6+3) psychic damage.
|
||||
"""
|
||||
name = "Shadow Demon"
|
||||
description = "Medium fiend (demon), chaotic evil"
|
||||
challenge_rating = 4
|
||||
armor_class = 13
|
||||
skills = "Stealth +7"
|
||||
saving_throws = "Dex +5, Cha +4"
|
||||
damage_vulnerabilities = "radiant"
|
||||
damage_resistances = "acid, fire, necrotic, thunder; bludgeoning, piercing, and slashing from nonmagical attacks"
|
||||
damage_immunities = "cold, lightning, poison"
|
||||
condition_immunities = "exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained"
|
||||
senses = "Darkvision 120 ft., Passive Perception 11"
|
||||
languages = "Abyssal, telepathy 120 ft."
|
||||
strength = Ability(1)
|
||||
dexterity = Ability(17)
|
||||
constitution = Ability(12)
|
||||
intelligence = Ability(14)
|
||||
wisdom = Ability(13)
|
||||
charisma = Ability(14)
|
||||
speed = 30
|
||||
fly_speed = 30
|
||||
hp_max = 66
|
||||
hit_dice = "12d8 + 12"
|
||||
|
||||
|
||||
class ShamblingMound(Monster):
|
||||
"""
|
||||
**Lightning Absorption**: Whenever the shambling mound is subjected to lightning damage, it takes no damage and regains a number of hit points equal to the lightning damage dealt.
|
||||
@@ -771,7 +812,6 @@ class StoneGolem(Monster):
|
||||
|
||||
**Slow**: The golem targets one or more creatures it can see within 10 ft. of it. Each target must make a DC 17 Wisdom saving throw against this magic. On a failed save, a target can't use reactions, its speed is halved, and it can't make more than one attack on its turn. In addition, the target can take either an action or a bonus action on its turn, not both. These effects last for 1 minute. A target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.
|
||||
"""
|
||||
|
||||
name = "Stone Golem"
|
||||
description = "Large construct, unaligned"
|
||||
challenge_rating = 10
|
||||
@@ -793,6 +833,69 @@ class StoneGolem(Monster):
|
||||
hit_dice = "17d10"
|
||||
|
||||
|
||||
class Stonemelder(Monster):
|
||||
"""Death Burst.
|
||||
When the stonemelder dies, it turns to stone and explodes in a
|
||||
burst of rock shards, becoming a smoking pile of rubble. Each
|
||||
creature within 10 feet of the exploding stonemelder must make a
|
||||
DC 14 Dexterity saving throw, taking 11 (2d10) bludgeoning
|
||||
damage on a failed save, or half as much damage on a successful
|
||||
one.
|
||||
Spellcasting.
|
||||
The stonemelder is a 7th-level spellcaster. Its spellcasting
|
||||
ability is Charisma (spell save DC 13, +5 to hit with spell
|
||||
attacks. It knows the following sorcerer spells (an asterisked
|
||||
spell is from *Princes of the Apocalypse* appendix B):
|
||||
Cantrips (at will):
|
||||
acid splash, blade ward, light mending, mold earth*
|
||||
1st level (4 slots):
|
||||
expeditious retreat, false life, shield
|
||||
2nd level (3 slots):
|
||||
Maximilian's earthen grasp,* shatter
|
||||
3rd level (3 slots):
|
||||
erupting earth,* meld into stone
|
||||
4th level (1 slots):
|
||||
stoneskin
|
||||
Black Earth Rod.
|
||||
*Melee Weapon Attack:* +5 to hit, reach 5 ft., one
|
||||
target. *Hit:* 5 (1d6 + 2) bludgeoning damage. The stonemelder
|
||||
can also expend a spell slot to deal extra damage, dealing 2d8
|
||||
bludgeoning damage for a 1st level slot, plus an additional 1d8
|
||||
for each level of the slot above 1st.
|
||||
|
||||
Stonemelders are spellcasters who gain their power from Ogrémoch,
|
||||
using elemental earth magic to sheathe their bodies in carapaces
|
||||
of rock. They are elite champions of the cult and answer only to
|
||||
the cult leaders. Not even the Black Earth priests tell
|
||||
stonemelders what to do.
|
||||
|
||||
Each stonemelder carries a weapon known as a Black Earth rod. Such
|
||||
a rod is like an ordinary mace, but in the hands of a stonemelder,
|
||||
it serves as a conduit for Ogrémoch's wrath.
|
||||
|
||||
"""
|
||||
name = "Stonemelder"
|
||||
description = "Medium humanoid (human), neutral evil"
|
||||
challenge_rating = 4
|
||||
armor_class = 17
|
||||
skills = "Intimidation +5, Perception +2"
|
||||
senses = "termorsense 30 ft., passive Perception 12"
|
||||
languages = "Common, Terran"
|
||||
strength = Ability(15)
|
||||
dexterity = Ability(10)
|
||||
constitution = Ability(16)
|
||||
intelligence = Ability(12)
|
||||
wisdom = Ability(11)
|
||||
charisma = Ability(17)
|
||||
speed = 30
|
||||
swim_speed = 0
|
||||
fly_speed = 0
|
||||
climb_speed = 0
|
||||
hp_max = 75
|
||||
hit_dice = "10d8 + 30"
|
||||
|
||||
|
||||
|
||||
class StormGiant(Monster):
|
||||
"""
|
||||
**Amphibious**: The giant can breathe air and water.
|
||||
|
||||
@@ -157,11 +157,11 @@ class Alarm(Spell):
|
||||
warded area. When you cast the spell, you can designate creatures that won't set
|
||||
off the alarm. You also choose whether the alarm is mental or audible.
|
||||
|
||||
A
|
||||
mental alarm alerts you with a ping in your mind if you are within 1 mile of the
|
||||
warded area. This ping awakens you if you are sleeping.
|
||||
An audible alarm
|
||||
produces the sound of a hand bell for 10 seconds within 60 feet.
|
||||
A mental alarm alerts you with a ping in your mind if you are
|
||||
within 1 mile of the warded area. This ping awakens you if you are
|
||||
sleeping. An audible alarm produces the sound of a hand bell for
|
||||
10 seconds within 60 feet.
|
||||
|
||||
"""
|
||||
|
||||
name = "Alarm"
|
||||
|
||||
Reference in New Issue
Block a user