mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-06-07 13:15:53 +02:00
Fixed broken test and cleaned up with flake8/black.
This commit is contained in:
+2
-2
@@ -22,8 +22,8 @@ script:
|
|||||||
- pytest --cov=dungeonsheets tests/
|
- pytest --cov=dungeonsheets tests/
|
||||||
- flake8 dungeonsheets/ --exit-zero
|
- flake8 dungeonsheets/ --exit-zero
|
||||||
- cd examples/
|
- cd examples/
|
||||||
- makesheets -d
|
- makesheets --debug
|
||||||
- makesheets -dF
|
- makesheets --debug --fancy
|
||||||
- cd ../
|
- cd ../
|
||||||
after_success:
|
after_success:
|
||||||
- coveralls
|
- coveralls
|
||||||
@@ -22,7 +22,6 @@ from dungeonsheets import (
|
|||||||
)
|
)
|
||||||
from dungeonsheets.stats import findattr
|
from dungeonsheets.stats import findattr
|
||||||
from dungeonsheets.weapons import Weapon
|
from dungeonsheets.weapons import Weapon
|
||||||
from dungeonsheets.readers import read_sheet_file
|
|
||||||
from dungeonsheets.entity import Entity
|
from dungeonsheets.entity import Entity
|
||||||
|
|
||||||
|
|
||||||
@@ -901,7 +900,7 @@ class Character(Entity):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
# Parse the sheet type
|
# Parse the sheet type
|
||||||
char_props.pop('sheet_type', "")
|
char_props.pop("sheet_type", "")
|
||||||
# Load classes
|
# Load classes
|
||||||
classes = char_props.get("classes", [])
|
classes = char_props.get("classes", [])
|
||||||
# backwards compatability
|
# backwards compatability
|
||||||
|
|||||||
@@ -115,10 +115,12 @@ def create_druid_shapes_tex(
|
|||||||
return template.render(character=character, use_dnd_decorations=use_dnd_decorations)
|
return template.render(character=character, use_dnd_decorations=use_dnd_decorations)
|
||||||
|
|
||||||
|
|
||||||
def make_sheet(sheet_file: File,
|
def make_sheet(
|
||||||
|
sheet_file: File,
|
||||||
flatten: bool = False,
|
flatten: bool = False,
|
||||||
fancy_decorations: bool = False,
|
fancy_decorations: bool = False,
|
||||||
debug: bool = False):
|
debug: bool = False,
|
||||||
|
):
|
||||||
"""Make a character or GM sheet into a PDF.
|
"""Make a character or GM sheet into a PDF.
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
@@ -140,16 +142,20 @@ def make_sheet(sheet_file: File,
|
|||||||
sheet_props = readers.read_sheet_file(sheet_file)
|
sheet_props = readers.read_sheet_file(sheet_file)
|
||||||
# Create the sheet
|
# Create the sheet
|
||||||
if sheet_props.get("sheet_type", "") == "gm":
|
if sheet_props.get("sheet_type", "") == "gm":
|
||||||
ret = make_gm_sheet(basename=base_name, gm_props=sheet_props,
|
ret = make_gm_sheet(
|
||||||
|
basename=base_name,
|
||||||
|
gm_props=sheet_props,
|
||||||
fancy_decorations=fancy_decorations,
|
fancy_decorations=fancy_decorations,
|
||||||
debug=debug)
|
debug=debug,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
ret = make_character_sheet(
|
ret = make_character_sheet(
|
||||||
basename=base_name,
|
basename=base_name,
|
||||||
character_props=sheet_props,
|
character_props=sheet_props,
|
||||||
flatten=flatten,
|
flatten=flatten,
|
||||||
fancy_decorations=fancy_decorations,
|
fancy_decorations=fancy_decorations,
|
||||||
debug=debug)
|
debug=debug,
|
||||||
|
)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@@ -177,7 +183,7 @@ def make_gm_sheet(
|
|||||||
tex = [
|
tex = [
|
||||||
jinja_env.get_template("preamble.tex").render(
|
jinja_env.get_template("preamble.tex").render(
|
||||||
use_dnd_decorations=fancy_decorations,
|
use_dnd_decorations=fancy_decorations,
|
||||||
title=gm_props['session_title'],
|
title=gm_props["session_title"],
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
# Add the monsters
|
# Add the monsters
|
||||||
@@ -202,9 +208,7 @@ def make_gm_sheet(
|
|||||||
use_dnd_decorations=fancy_decorations,
|
use_dnd_decorations=fancy_decorations,
|
||||||
)
|
)
|
||||||
except exceptions.LatexNotFoundError:
|
except exceptions.LatexNotFoundError:
|
||||||
log.warning(
|
log.warning(f"``pdflatex`` not available. Skipping {basename}")
|
||||||
f"``pdflatex`` not available. Skipping {basename}"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def make_character_sheet(
|
def make_character_sheet(
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ shape forms.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
from dungeonsheets.stats import Ability
|
|
||||||
from dungeonsheets.entity import Entity
|
from dungeonsheets.entity import Entity
|
||||||
|
|
||||||
|
|
||||||
@@ -15,7 +14,10 @@ class Monster(Entity):
|
|||||||
description = ""
|
description = ""
|
||||||
challenge_rating = 0
|
challenge_rating = 0
|
||||||
skills = "Perception +3, Stealth +4"
|
skills = "Perception +3, Stealth +4"
|
||||||
swim_speed = 0 # TODO: Consider refactoring stats.Speed to consider all of these just like we do stats.Ability
|
# TODO: Consider refactoring stats.Speed to consider all of these
|
||||||
|
# just like we do stats.Ability
|
||||||
|
|
||||||
|
swim_speed = 0
|
||||||
fly_speed = 0
|
fly_speed = 0
|
||||||
climb_speed = 0
|
climb_speed = 0
|
||||||
hp_max = 10
|
hp_max = 10
|
||||||
@@ -28,4 +30,3 @@ class Monster(Entity):
|
|||||||
def is_beast(self):
|
def is_beast(self):
|
||||||
is_beast = "beast" in self.description.lower()
|
is_beast = "beast" in self.description.lower()
|
||||||
return is_beast
|
return is_beast
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Aboleth(Monster):
|
class Aboleth(Monster):
|
||||||
"""
|
"""
|
||||||
**Amphibious**: The aboleth can breathe air and water.
|
**Amphibious**: The aboleth can breathe air and water.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Baboon(Monster):
|
class Baboon(Monster):
|
||||||
"""
|
"""
|
||||||
**Pack Tactics**: The baboon has advantage on an attack roll against a creature if at least one of the baboon's allies is within 5 ft. of the creature and the ally isn't incapacitated.
|
**Pack Tactics**: The baboon has advantage on an attack roll against a creature if at least one of the baboon's allies is within 5 ft. of the creature and the ally isn't incapacitated.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Camel(Monster):
|
class Camel(Monster):
|
||||||
"""
|
"""
|
||||||
**Bite**: Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage.
|
**Bite**: Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Darkmantle(Monster):
|
class Darkmantle(Monster):
|
||||||
"""
|
"""
|
||||||
**Echolocation**: The darkmantle can't use its blindsight while deafened.
|
**Echolocation**: The darkmantle can't use its blindsight while deafened.
|
||||||
@@ -368,7 +367,9 @@ class Dretch(Monster):
|
|||||||
armor_class = 11
|
armor_class = 11
|
||||||
skills = ""
|
skills = ""
|
||||||
senses = "Darkvision 60 ft., Passive Perception 9"
|
senses = "Darkvision 60 ft., Passive Perception 9"
|
||||||
languages = "Abyssal, telepathy 60 ft. (works only with creatures that understand Abyssal)"
|
languages = (
|
||||||
|
"Abyssal, telepathy 60 ft. (works only with creatures that understand Abyssal)"
|
||||||
|
)
|
||||||
strength = Ability(11)
|
strength = Ability(11)
|
||||||
dexterity = Ability(11)
|
dexterity = Ability(11)
|
||||||
constitution = Ability(12)
|
constitution = Ability(12)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Eagle(Monster):
|
class Eagle(Monster):
|
||||||
"""
|
"""
|
||||||
**Keen Sight**: The eagle has advantage on Wisdom (Perception) checks that rely on sight.
|
**Keen Sight**: The eagle has advantage on Wisdom (Perception) checks that rely on sight.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class FireElemental(Monster):
|
class FireElemental(Monster):
|
||||||
"""
|
"""
|
||||||
**Fire Form**: The elemental can move through a space as narrow as 1 inch wide without squeezing. A creature that touches the elemental or hits it with a melee attack while within 5 ft. of it takes 5 (1d10) fire damage. In addition, the elemental can enter a hostile creature's space and stop there. The first time it enters a creature's space on a turn, that creature takes 5 (1d10) fire damage and catches fire; until someone takes an action to douse the fire, the creature takes 5 (1d10) fire damage at the start of each of its turns.
|
**Fire Form**: The elemental can move through a space as narrow as 1 inch wide without squeezing. A creature that touches the elemental or hits it with a melee attack while within 5 ft. of it takes 5 (1d10) fire damage. In addition, the elemental can enter a hostile creature's space and stop there. The first time it enters a creature's space on a turn, that creature takes 5 (1d10) fire damage and catches fire; until someone takes an action to douse the fire, the creature takes 5 (1d10) fire damage at the start of each of its turns.
|
||||||
|
|||||||
@@ -8,16 +8,19 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Gargoyle(Monster):
|
class Gargoyle(Monster):
|
||||||
"""
|
"""**False Appearance**: While the gargoyle remains motion less, it is
|
||||||
**False Appearance**: While the gargoyle remains motion less, it is indistinguishable from an inanimate statue.
|
indistinguishable from an inanimate statue.
|
||||||
|
|
||||||
**Multiattack**: The gargoyle makes two attacks: one with its bite and one with its claws.
|
**Multiattack**: The gargoyle makes two attacks: one with its bite
|
||||||
|
and one with its claws.
|
||||||
|
|
||||||
**Bite**: Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) piercing damage.
|
**Bite**: Melee Weapon Attack: +4 to hit, reach 5 ft., one
|
||||||
|
target. Hit: 5 (1d6 + 2) piercing damage.
|
||||||
|
|
||||||
|
**Claws**: Melee Weapon Attack: +4 to hit, reach 5 ft., one
|
||||||
|
target. Hit: 5 (1d6 + 2) slashing damage.
|
||||||
|
|
||||||
**Claws**: Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) slashing damage.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name = "Gargoyle"
|
name = "Gargoyle"
|
||||||
@@ -413,14 +416,18 @@ class GiantCrocodile(Monster):
|
|||||||
|
|
||||||
|
|
||||||
class GiantEagle(Monster):
|
class GiantEagle(Monster):
|
||||||
"""
|
"""**Keen Sight**: The eagle has advantage on Wisdom (Perception)
|
||||||
**Keen Sight**: The eagle has advantage on Wisdom (Perception) checks that rely on sight.
|
checks that rely on sight.
|
||||||
|
|
||||||
**Multiattack**: The eagle makes two attacks: one with its beak and one with its talons.
|
**Multiattack**: The eagle makes two attacks: one with its beak
|
||||||
|
and one with its talons.
|
||||||
|
|
||||||
**Beak**: Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) piercing damage.
|
**Beak**: Melee Weapon Attack: +5 to hit, reach 5 ft., one
|
||||||
|
target. Hit: 6 (1d6 + 3) piercing damage.
|
||||||
|
|
||||||
|
**Talons**: Melee Weapon Attack: +5 to hit, reach 5 ft., one
|
||||||
|
target. Hit: 10 (2d6 + 3) slashing damage.
|
||||||
|
|
||||||
**Talons**: Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) slashing damage.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name = "Giant Eagle"
|
name = "Giant Eagle"
|
||||||
@@ -1491,7 +1498,10 @@ class Grimlock(Monster):
|
|||||||
challenge_rating = 0.25
|
challenge_rating = 0.25
|
||||||
armor_class = 11
|
armor_class = 11
|
||||||
skills = "Athletics +5, Perception +3, Stealth +3"
|
skills = "Athletics +5, Perception +3, Stealth +3"
|
||||||
senses = "Blindsight 30 ft. or 10 ft. while deafened (blind beyond this radius), Passive Perception 13"
|
senses = (
|
||||||
|
"Blindsight 30 ft. or 10 ft. while deafened (blind beyond this radius), Passive"
|
||||||
|
" Perception 13"
|
||||||
|
)
|
||||||
languages = "Undercommon"
|
languages = "Undercommon"
|
||||||
strength = Ability(16)
|
strength = Ability(16)
|
||||||
dexterity = Ability(12)
|
dexterity = Ability(12)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class HalfRedDragonVeteran(Monster):
|
class HalfRedDragonVeteran(Monster):
|
||||||
"""
|
"""
|
||||||
**Multiattack**: The veteran makes two longsword attacks. If it has a shortsword drawn, it can also make a shortsword attack.
|
**Multiattack**: The veteran makes two longsword attacks. If it has a shortsword drawn, it can also make a shortsword attack.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IceDevil(Monster):
|
class IceDevil(Monster):
|
||||||
"""
|
"""
|
||||||
**Devil's Sight**: Magical darkness doesn't impede the devil's darkvision.
|
**Devil's Sight**: Magical darkness doesn't impede the devil's darkvision.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Jackal(Monster):
|
class Jackal(Monster):
|
||||||
"""
|
"""
|
||||||
**Keen Hearing and Smell**: The jackal has advantage on Wisdom (Perception) checks that rely on hearing or smell.
|
**Keen Hearing and Smell**: The jackal has advantage on Wisdom (Perception) checks that rely on hearing or smell.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class KillerWhale(Monster):
|
class KillerWhale(Monster):
|
||||||
"""
|
"""
|
||||||
**Echolocation**: The whale can't use its blindsight while deafened.
|
**Echolocation**: The whale can't use its blindsight while deafened.
|
||||||
@@ -132,7 +131,10 @@ class Kraken(Monster):
|
|||||||
armor_class = 18
|
armor_class = 18
|
||||||
skills = ""
|
skills = ""
|
||||||
senses = "Truesight 120 ft., Passive Perception 14"
|
senses = "Truesight 120 ft., Passive Perception 14"
|
||||||
languages = "understands Abyssal, Celestial, Infernal, and Primordial but can't speak, telepathy 120 ft."
|
languages = (
|
||||||
|
"understands Abyssal, Celestial, Infernal, and Primordial but can't speak,"
|
||||||
|
" telepathy 120 ft."
|
||||||
|
)
|
||||||
strength = Ability(30)
|
strength = Ability(30)
|
||||||
dexterity = Ability(11)
|
dexterity = Ability(11)
|
||||||
constitution = Ability(25)
|
constitution = Ability(25)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Lamia(Monster):
|
class Lamia(Monster):
|
||||||
"""
|
"""
|
||||||
**Innate Spellcasting**: The lamia's innate spellcasting ability is Charisma (spell save DC 13). It can innately cast the following spells, requiring no material components. At will: disguise self (any humanoid form), major image 3/day each: charm person, mirror image, scrying, suggestion 1/day: geas
|
**Innate Spellcasting**: The lamia's innate spellcasting ability is Charisma (spell save DC 13). It can innately cast the following spells, requiring no material components. At will: disguise self (any humanoid form), major image 3/day each: charm person, mirror image, scrying, suggestion 1/day: geas
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Mage(Monster):
|
class Mage(Monster):
|
||||||
"""
|
"""
|
||||||
**Spellcasting**: The mage is a 9th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 14, +6 to hit with spell attacks). The mage has the following wizard spells prepared:
|
**Spellcasting**: The mage is a 9th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 14, +6 to hit with spell attacks). The mage has the following wizard spells prepared:
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Nalfeshnee(Monster):
|
class Nalfeshnee(Monster):
|
||||||
"""
|
"""
|
||||||
**Magic Resistance**: The nalfeshnee has advantage on saving throws against spells and other magical effects.
|
**Magic Resistance**: The nalfeshnee has advantage on saving throws against spells and other magical effects.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OchreJelly(Monster):
|
class OchreJelly(Monster):
|
||||||
"""
|
"""
|
||||||
**Amorphous**: The jelly can move through a space as narrow as 1 inch wide without squeezing.
|
**Amorphous**: The jelly can move through a space as narrow as 1 inch wide without squeezing.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Panther(Monster):
|
class Panther(Monster):
|
||||||
"""
|
"""
|
||||||
**Keen Smell**: The panther has advantage on Wisdom (Perception) checks that rely on smell.
|
**Keen Smell**: The panther has advantage on Wisdom (Perception) checks that rely on smell.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Quasit(Monster):
|
class Quasit(Monster):
|
||||||
"""
|
"""
|
||||||
**Shapechanger**: The quasit can use its action to polymorph into a beast form that resembles a bat (speed 10 ft. fly 40 ft.), a centipede (40 ft., climb 40 ft.), or a toad (40 ft., swim 40 ft.), or back into its true form . Its statistics are the same in each form, except for the speed changes noted. Any equipment it is wearing or carrying isn't transformed . It reverts to its true form if it dies.
|
**Shapechanger**: The quasit can use its action to polymorph into a beast form that resembles a bat (speed 10 ft. fly 40 ft.), a centipede (40 ft., climb 40 ft.), or a toad (40 ft., swim 40 ft.), or back into its true form . Its statistics are the same in each form, except for the speed changes noted. Any equipment it is wearing or carrying isn't transformed . It reverts to its true form if it dies.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Rakshasa(Monster):
|
class Rakshasa(Monster):
|
||||||
"""
|
"""
|
||||||
**Limited Magic Immunity**: The rakshasa can't be affected or detected by spells of 6th level or lower unless it wishes to be. It has advantage on saving throws against all other spells and magical effects.
|
**Limited Magic Immunity**: The rakshasa can't be affected or detected by spells of 6th level or lower unless it wishes to be. It has advantage on saving throws against all other spells and magical effects.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SaberToothedTiger(Monster):
|
class SaberToothedTiger(Monster):
|
||||||
"""
|
"""
|
||||||
**Keen Smell**: The tiger has advantage on Wisdom (Perception) checks that rely on smell.
|
**Keen Smell**: The tiger has advantage on Wisdom (Perception) checks that rely on smell.
|
||||||
@@ -645,7 +644,10 @@ class Spy(Monster):
|
|||||||
description = "Medium humanoid, any alignment"
|
description = "Medium humanoid, any alignment"
|
||||||
challenge_rating = 1
|
challenge_rating = 1
|
||||||
armor_class = 12
|
armor_class = 12
|
||||||
skills = "Deception +5, Insight +4, Investigation +5, Perception +6, Persuasion +5, Stealth +4"
|
skills = (
|
||||||
|
"Deception +5, Insight +4, Investigation +5, Perception +6, Persuasion +5,"
|
||||||
|
" Stealth +4"
|
||||||
|
)
|
||||||
senses = "Passive Perception 16"
|
senses = "Passive Perception 16"
|
||||||
languages = "any two languages"
|
languages = "any two languages"
|
||||||
strength = Ability(10)
|
strength = Ability(10)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Tarrasque(Monster):
|
class Tarrasque(Monster):
|
||||||
"""
|
"""
|
||||||
**Legendary Resistance**: If the tarrasque fails a saving throw, it can choose to succeed instead.
|
**Legendary Resistance**: If the tarrasque fails a saving throw, it can choose to succeed instead.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Unicorn(Monster):
|
class Unicorn(Monster):
|
||||||
"""
|
"""
|
||||||
**Charge**: If the unicorn moves at least 20 ft. straight toward a target and then hits it with a horn attack on the same turn, the target takes an extra 9 (2d8) piercing damage. If the target is a creature, it must succeed on a DC 15 Strength saving throw or be knocked prone.
|
**Charge**: If the unicorn moves at least 20 ft. straight toward a target and then hits it with a horn attack on the same turn, the target takes an extra 9 (2d8) piercing damage. If the target is a creature, it must succeed on a DC 15 Strength saving throw or be knocked prone.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Vampire(Monster):
|
class Vampire(Monster):
|
||||||
"""
|
"""
|
||||||
**Shapechanger**: If the vampire isn't in sun light or running water, it can use its action to polymorph into a Tiny bat or a Medium cloud of mist, or back into its true form.
|
**Shapechanger**: If the vampire isn't in sun light or running water, it can use its action to polymorph into a Tiny bat or a Medium cloud of mist, or back into its true form.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Warhorse(Monster):
|
class Warhorse(Monster):
|
||||||
"""
|
"""
|
||||||
**Trampling Charge**: If the horse moves at least 20 ft. straight toward a creature and then hits it with a hooves attack on the same turn, that target must succeed on a DC 14 Strength saving throw or be knocked prone. If the target is prone, the horse can make another attack with its hooves against it as a bonus action.
|
**Trampling Charge**: If the horse moves at least 20 ft. straight toward a creature and then hits it with a hooves attack on the same turn, that target must succeed on a DC 14 Strength saving throw or be knocked prone. If the target is prone, the horse can make another attack with its hooves against it as a bonus action.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Xorn(Monster):
|
class Xorn(Monster):
|
||||||
"""
|
"""
|
||||||
**Earth Glide**: The xorn can burrow through nonmagical, unworked earth and stone. While doing so, the xorn doesn't disturb the material it moves through.
|
**Earth Glide**: The xorn can burrow through nonmagical, unworked earth and stone. While doing so, the xorn doesn't disturb the material it moves through.
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class YoungBlackDragon(Monster):
|
class YoungBlackDragon(Monster):
|
||||||
"""
|
"""
|
||||||
**Amphibious**: The dragon can breathe air and water.
|
**Amphibious**: The dragon can breathe air and water.
|
||||||
|
|||||||
@@ -8,12 +8,15 @@ from dungeonsheets.monsters.monsters import Monster
|
|||||||
from dungeonsheets.stats import Ability
|
from dungeonsheets.stats import Ability
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Zombie(Monster):
|
class Zombie(Monster):
|
||||||
"""
|
"""**Undead Fortitude**: If damage reduces the zombie to 0 hit points,
|
||||||
**Undead Fortitude**: If damage reduces the zombie to 0 hit points, it must make a Constitution saving throw with a DC of 5+the damage taken, unless the damage is radiant or from a critical hit. On a success, the zombie drops to 1 hit point instead.
|
it must make a Constitution saving throw with a DC of 5+the damage
|
||||||
|
taken, unless the damage is radiant or from a critical hit. On a
|
||||||
|
success, the zombie drops to 1 hit point instead.
|
||||||
|
|
||||||
|
**Slam**: Melee Weapon Attack: +3 to hit, reach 5 ft., one
|
||||||
|
target. Hit: 4 (1d6 + 1) bludgeoning damage.
|
||||||
|
|
||||||
**Slam**: Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) bludgeoning damage.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name = "Zombie"
|
name = "Zombie"
|
||||||
|
|||||||
@@ -127,4 +127,4 @@ class TexCreatorTestCase(unittest.TestCase):
|
|||||||
def test_create_monsters_tex(self):
|
def test_create_monsters_tex(self):
|
||||||
monsters_ = [monsters.GiantEagle()]
|
monsters_ = [monsters.GiantEagle()]
|
||||||
tex = make_sheets.create_monsters_tex(monsters=monsters_)
|
tex = make_sheets.create_monsters_tex(monsters=monsters_)
|
||||||
self.assertIn(r"Giant eagle", tex)
|
self.assertIn(r"Giant Eagle", tex)
|
||||||
|
|||||||
Reference in New Issue
Block a user