mirror of
https://github.com/Threnklyn/dungeon-sheets.git
synced 2026-05-19 04:33:26 +02:00
Added an option to put random tables into the GM notes.
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
\section*{Random Tables}
|
||||
|
||||
[% if conjure_animals %]
|
||||
|
||||
%% https://the-azure-triskele.obsidianportal.com/wikis/conjure-animals-table
|
||||
\subsection*{Conjure Animals}
|
||||
|
||||
%% Which category of beasts to summon
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d4 & Number of Beasts \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d4 & Number of Beasts \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1 & One beast of challenge rating 2 \\
|
||||
2 & Two beasts of challenge rating 1 \\
|
||||
3 & Four beasts of challenge rating 1/2 \\
|
||||
4 & Eight beasts of challenge rating 1/4 or lower \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
|
||||
%% CR2 Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d20 & CR2 Beasts \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d20 & Challenge Rating 2 Beasts \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1-2 & Allosaurus \\
|
||||
3-4 & Giant Boar \\
|
||||
5-6 & Giant Constrictor Snake \\
|
||||
7-8 & Giant Elk \\
|
||||
9-10 & Hunter Shark \\
|
||||
11 & Plesiosaurus \\
|
||||
12-13 & Polar Bear \\
|
||||
14-15 & Rhinoceros \\
|
||||
16-17 & Saber-toothed Tiger \\
|
||||
18-19 & Swarm of Poisonous Snakes \\
|
||||
20 & Roll on CR 1 Beast Table \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
|
||||
%% CR1 Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d12 & Challenge Rating 1 Beasts \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d12 & Challenge Rating 1 Beasts \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1 & Brown Bear \\
|
||||
2 & Dire Wolf \\
|
||||
3 & Fire Snake \\
|
||||
4 & Giant Eagle \\
|
||||
5 & Giant Hyena \\
|
||||
6 & Giant Octopus \\
|
||||
7 & Giant Spider \\
|
||||
8 & Giant Toad \\
|
||||
9 & Giant Vulture \\
|
||||
10 & Lion \\
|
||||
11 & Tiger \\
|
||||
12 & Roll on CR 1/2 Beast Table \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
%% CR1/2 Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d20 & Challenge Rating $\frac{1}{2}$ Beasts \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d20 & Challenge Rating $\frac{1}{2}$ Beasts \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1-2 & Ape \\
|
||||
3-4 & Black Bear \\
|
||||
5-6 & Crocodile \\
|
||||
7-8 & Giant Goat \\
|
||||
9-10 & Giant Sea Horse \\
|
||||
11-12 & Giant Wasp \\
|
||||
13-14 & Reef Shark \\
|
||||
15-16 & Swarm of Insects (below) \\
|
||||
17-18 & Warhorse \\
|
||||
19 & Worg \\
|
||||
20 & Roll on Lesser Beast Menu Table \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
|
||||
%% Swarm of insects (mostly for flavor)
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d6 & Swarm of Insects \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d6 & Swarm of Insects \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1 & Ant \\
|
||||
2 & Beatles \\
|
||||
3 & Centipedes \\
|
||||
4 & Locusts \\
|
||||
5 & Spiders \\
|
||||
6 & Wasps \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
|
||||
%% Challenge Rating 1/4 and Lesser Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d6 & CR $\frac{1}{4}$ and Lesser Beast Menu \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d6 & CR $\frac{1}{4}$ and Lesser Beast Menu \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1-2 & Menu A \\
|
||||
3-4 & Menu B \\
|
||||
5-6 & Menu C \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
|
||||
%% CR1/4 and Lesser Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d20 & Lesser Beast Menu A \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d12 & Lesser Beast Menu A \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1 & Axe Beak \\
|
||||
2 & Baboon \\
|
||||
3 & Badger \\
|
||||
4 & Bat \\
|
||||
5 & Blood Hawk \\
|
||||
6 & Boar \\
|
||||
7 & Camel \\
|
||||
8 & Cat \\
|
||||
9 & Chicken* \\
|
||||
10 & Constrictor Snake \\
|
||||
11 & Crab \\
|
||||
12 & Deer \\
|
||||
13 & Draft Horse \\
|
||||
14 & Eagle \\
|
||||
15 & Elk \\
|
||||
16 & Flying Snake \\
|
||||
17 & Frog \\
|
||||
18 & Giant Badger \\
|
||||
19 & Giant Bat \\
|
||||
20 & Giant Centipede \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
\begin{description}
|
||||
\item [*Chicken:] Raven stats with Advantage on checks to wake
|
||||
up targets instead of mimicry
|
||||
\end{description}
|
||||
%% CR1/4 and Lesser Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d20 & Lesser Beast Menu B \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d12 & Lesser Beast Menu B \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1 & Giant Crab \\
|
||||
2 & Giant Fire Beetle \\
|
||||
3 & Giant Frog \\
|
||||
4 & Giant Lizard \\
|
||||
5 & Giant Owl \\
|
||||
6 & Giant Poisonous Snake \\
|
||||
7 & Giant Rat \\
|
||||
8 & Giant Weasel \\
|
||||
9 & Giant Wolf Spider \\
|
||||
10 & Goat \\
|
||||
11 & Hawk \\
|
||||
12 & Hyena \\
|
||||
13 & Jackal \\
|
||||
14 & Lemur* \\
|
||||
15 & Lizard \\
|
||||
16 & Mastiff \\
|
||||
17 & Mule \\
|
||||
18 & Newt** \\
|
||||
19 & Octopus \\
|
||||
20 & Octopus, Cascadian Tree*** \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
\begin{description}
|
||||
\item [*Lemur] Weasel stats with a common Climb speed instead of a
|
||||
bite attack
|
||||
\item [**Newt:] Lizard stats with Amphibious instead of a bite
|
||||
attack
|
||||
\item [***Octopus, Cascadian Tree:] Octopus stats with Amphibious
|
||||
and a 10 ft land speed instead of camouflage
|
||||
\end{description}
|
||||
|
||||
%% CR1/4 and Lesser Beasts
|
||||
[% if use_dnd_decorations %]
|
||||
\begin{DndTable}{c l}
|
||||
1d20 & Lesser Beast Menu C \\
|
||||
[% else %]
|
||||
\begin{tabular}{c | l}
|
||||
1d12 & Lesser Beast Menu C \\
|
||||
\hline\hline
|
||||
[% endif %]
|
||||
1 & Owl \\
|
||||
2 & Panther \\
|
||||
3 & Poisonous Snake \\
|
||||
4 & Pony \\
|
||||
5 & Pteranodon \\
|
||||
6 & Quipper \\
|
||||
7 & Rat \\
|
||||
8 & Raven \\
|
||||
9 & Riding Horse \\
|
||||
10 & Scorpion \\
|
||||
11 & Sea Horse \\
|
||||
12 & Shocker Lizard* \\
|
||||
13 & Spider \\
|
||||
14 & Swarm of Bats \\
|
||||
15 & Swarm of Rats \\
|
||||
16 & Swarm of Ravens \\
|
||||
17 & Turtle** \\
|
||||
18 & Vulture \\
|
||||
19 & Weasel \\
|
||||
20 & Wolf \\
|
||||
[% if use_dnd_decorations %]
|
||||
\end{DndTable}
|
||||
[% else %]
|
||||
\end{tabular}
|
||||
[% endif %]
|
||||
|
||||
\begin{description}
|
||||
\item [*Shocker Lizard] Lizard stats with Static Electricity ranged
|
||||
attack of 1d6 Electricity damage Close/Medium.
|
||||
\item [**Turtle] Lizard stats with 14 natural armor and no climb
|
||||
speed.
|
||||
\end{description}
|
||||
|
||||
[% endif %]
|
||||
@@ -130,6 +130,15 @@ def create_druid_shapes_tex(
|
||||
return template.render(character=character, use_dnd_decorations=use_dnd_decorations)
|
||||
|
||||
|
||||
def create_random_tables_tex(
|
||||
conjure_animals: bool,
|
||||
use_dnd_decorations: bool = False,
|
||||
) -> str:
|
||||
template = jinja_env.get_template("random_tables_template.tex")
|
||||
return template.render(conjure_animals=conjure_animals,
|
||||
use_dnd_decorations=use_dnd_decorations)
|
||||
|
||||
|
||||
def make_sheet(
|
||||
sheet_file: File,
|
||||
flatten: bool = False,
|
||||
@@ -197,12 +206,12 @@ def make_gm_sheet(
|
||||
tex = [
|
||||
jinja_env.get_template("preamble.tex").render(
|
||||
use_dnd_decorations=fancy_decorations,
|
||||
title=gm_props["session_title"],
|
||||
title=gm_props.pop("session_title", "GM Session Notes"),
|
||||
)
|
||||
]
|
||||
# Add the party stats table and session summary
|
||||
party = []
|
||||
for char_file in gm_props.get("party", []):
|
||||
for char_file in gm_props.pop("party", []):
|
||||
# Resolve the file path
|
||||
char_file = Path(char_file)
|
||||
if not char_file.is_absolute():
|
||||
@@ -212,7 +221,7 @@ def make_gm_sheet(
|
||||
character_props = readers.read_sheet_file(char_file)
|
||||
member = _char.Character.load(character_props)
|
||||
party.append(member)
|
||||
summary = gm_props.get("summary", "")
|
||||
summary = gm_props.pop("summary", "")
|
||||
tex.append(
|
||||
create_party_summary_tex(
|
||||
party, summary_rst=summary, use_dnd_decorations=fancy_decorations
|
||||
@@ -220,7 +229,7 @@ def make_gm_sheet(
|
||||
)
|
||||
# Add the monsters
|
||||
monsters_ = []
|
||||
for monster in gm_props.get("monsters", []):
|
||||
for monster in gm_props.pop("monsters", []):
|
||||
if isinstance(monster, monsters.Monster):
|
||||
# It's already a monster, so just add it
|
||||
new_monster = monster
|
||||
@@ -238,12 +247,27 @@ def make_gm_sheet(
|
||||
tex.append(
|
||||
create_monsters_tex(monsters_, use_dnd_decorations=fancy_decorations)
|
||||
)
|
||||
# Add the random tables
|
||||
random_tables = [s.replace(" ", "_").lower() for s in gm_props.pop("random_tables")]
|
||||
tex.append(
|
||||
create_random_tables_tex(
|
||||
conjure_animals=("conjure_animals" in random_tables),
|
||||
use_dnd_decorations=fancy_decorations,
|
||||
)
|
||||
)
|
||||
# Add the closing TeX
|
||||
tex.append(
|
||||
jinja_env.get_template("postamble.tex").render(
|
||||
use_dnd_decorations=fancy_decorations
|
||||
)
|
||||
)
|
||||
# Warn about any unhandled sheet properties
|
||||
gm_props.pop("dungeonsheets_version")
|
||||
gm_props.pop("sheet_type")
|
||||
if len(gm_props.keys()) > 0:
|
||||
msg = f"Unhandled attributes in '{str(gm_file)}': {','.join(gm_props.keys())}"
|
||||
log.warn(msg)
|
||||
warnings.warn(msg)
|
||||
# Typeset combined LaTeX file
|
||||
try:
|
||||
if len(tex) > 2:
|
||||
|
||||
@@ -4,7 +4,7 @@ game mechanics."""
|
||||
from dungeonsheets.spells import Spell
|
||||
from dungeonsheets.features import Feature
|
||||
from dungeonsheets.infusions import Infusion
|
||||
from dungeonsheets.weapons import Weapon, MeleeWeapon, RangedWeapon, SimpleWeapon, MartialWeapon,
|
||||
from dungeonsheets.weapons import Weapon, MeleeWeapon, RangedWeapon, SimpleWeapon, MartialWeapon
|
||||
from dungeonsheets.armor import Armor, Shield
|
||||
from dungeonsheets.magic_items import MagicItem
|
||||
from dungeonsheets.monsters import Monster
|
||||
|
||||
Reference in New Issue
Block a user