-
Notifications
You must be signed in to change notification settings - Fork 307
/
example.tex
361 lines (289 loc) · 13.5 KB
/
example.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
\documentclass[letterpaper,twocolumn,openany,nodeprecatedcode]{dndbook}
% Use babel or polyglossia to automatically redefine macros for terms
% Armor Class, Level, etc...
% Default output is in English; captions are located in lib/dndstrings.sty.
% If no captions exist for a language, English will be used.
%1. To load a language with babel:
% \usepackage[<lang>]{babel}
%2. To load a language with polyglossia:
% \usepackage{polyglossia}
% \setdefaultlanguage{<lang>}
\usepackage[english]{babel}
%\usepackage[italian]{babel}
% For further options (multilanguage documents, hypenations, language environments...)
% please refer to babel/polyglossia's documentation.
\usepackage[utf8]{inputenc}
\usepackage[singlelinecheck=false]{caption}
\usepackage{lipsum}
\usepackage{listings}
\usepackage{shortvrb}
\usepackage{stfloats}
\captionsetup[table]{labelformat=empty,font={sf,sc,bf,},skip=0pt}
\MakeShortVerb{|}
\lstset{%
basicstyle=\ttfamily,
language=[LaTeX]{TeX},
breaklines=true,
}
\title{The Dark \LaTeX{} \\
\large An Example of the dndbook Class}
\author{The rpgTeX Team}
\date{2020/04/21}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\mainmatter%
\part{Layout}
\chapter{Sections}
\DndDropCapLine{T}{his package is designed to aid you in} writing beautifully typeset documents for the fifth edition of the world's greatest roleplaying game. It starts by adjusting the section formatting from the defaults in \LaTeX{} to something a bit more familiar to the reader. The chapter formatting is displayed above.
\section{Section}
Sections break up chapters into large groups of associated text.
\subsection{Subsection}
Subsections further break down the information for the reader.
\subsubsection{Subsubsection}
Subsubsections are the furthest division of text that still have a block header. Below this level, headers are displayed inline.
\paragraph{Paragraph}
The paragraph format is seldom used in the core books, but is available if you prefer it to the ``normal'' style.
\subparagraph{Subparagraph}
The subparagraph format with the paragraph indent is likely going to be more familiar to the reader.
\section{Special Sections}
The module also includes functions to aid in the proper typesetting of multi-line section headers: |\DndFeatHeader| for feats, |\DndItemHeader| magic items and traps, and |\DndSpellHeader| for spells.
\DndFeatHeader{Typesetting Savant}[Prerequisite: \LaTeX{} distribution]
You have acquired a package which aids in typesetting source material for one of your favorite games, giving you the following benefits:
\begin{itemize}
\item You have advantage on Intelligence checks to typeset new content.
\item When you fail an Intelligence check to typeset new content, you can ask questions online at the package's website.
\end{itemize}
\DndItemHeader{Foo's Quill}{Wondrous item, rare}
This quill has 3 charges. While holding it, you can use an action to expend 1 of its charges. The quill leaps from your hand and writes a contract applicable to your situation.
The quill regains 1d3 expended charges daily at dawn.
\DndSpellHeader%
{Beautiful Typesetting}
{4th-level illusion}
{1 action}
{5 feet}
{S, M (ink and parchment, which the spell consumes)}
{Until dispelled}
You are able to transform a written message of any length into a beautiful scroll. All creatures within range that can see the scroll must make a wisdom saving throw or be charmed by you until the spell ends.
While the creature is charmed by you, they cannot take their eyes off the scroll and cannot willingly move away from the scroll. Also, the targets can make a wisdom saving throw at the end of each of their turns. On a success, they are no longer charmed.
\section{Map Regions}
The map region functions |\DndArea| and |\DndSubArea| provide automatic numbering of areas.
\DndArea{Village of Hommlet}
This is the village of hommlet.
\DndSubArea{Inn of the Welcome Wench}
Inside the village is the inn of the Welcome Wench.
\DndSubArea{Blacksmith's Forge}
There's a blacksmith in town, too.
\DndArea{Foo's Castle}
This is foo's home, a hovel of mud and sticks.
\DndSubArea{Moat}
This ditch has a board spanning it.
\DndSubArea{Entrance}
A five-foot hole reveals the dirt floor illuminated by a hole in the roof.
\chapter{Text Boxes}
The module has three environments for setting text apart so that it is drawn to the reader's attention. |DndReadAloud| is used for text that a game master would read aloud.
\begin{DndReadAloud}
As you approach this module you get a sense that the blood and tears of many generations went into its making. A warm feeling welcomes you as you type your first words.
\end{DndReadAloud}
\section{As an Aside}
The other two environments are the |DndComment| and the |DndSidebar|. The |DndComment| is breakable and can safely be used inline in the text.
\begin{DndComment}{This Is a Comment Box!}
A |DndComment| is a box for minimal highlighting of text. It lacks the ornamentation of |DndSidebar|, but it can handle being broken over a column.
\end{DndComment}
The |DndSidebar| is not breakable and is best used floated toward a page corner as it is below.
\begin{DndSidebar}[float=!b]{Behold the DndSidebar!}
The |DndSidebar| is used as a sidebar. It does not break over columns and is best used with a figure environment to float it to one corner of the page where the surrounding text can then flow around it.
\end{DndSidebar}
\section{Tables}
The |DndTable| colors the even rows and is set to the width of a line by default.
\begin{DndTable}[header=Nice Table]{XX}
Table head & Table head \\
Some value & Some value \\
Some value & Some value \\
Some value & Some value
\end{DndTable}
\chapter{Monsters and NPCs}
% Monster stat block
\begin{DndMonster}[float*=b,width=\textwidth + 8pt]{Monster Foo}
\begin{multicols}{2}
\DndMonsterType{Medium aberration (metasyntactic variable), neutral evil}
% If you want to use commas in the key values, enclose the values in braces.
\DndMonsterBasics[
armor-class = {9 (12 with \emph{mage armor})},
hit-points = {\DndDice{3d8 + 3}},
speed = {30 ft., fly 30 ft.},
]
\DndMonsterAbilityScores[
str = 12,
dex = 8,
con = 13,
int = 10,
wis = 14,
cha = 15,
]
\DndMonsterDetails[
%saving-throws = {Str +0, Dex +0, Con +0, Int +0, Wis +0, Cha +0},
%skills = {Acrobatics +0, Animal Handling +0, Arcana +0, Athletics +0, Deception +0, History +0, Insight +0, Intimidation +0, Investigation +0, Medicine +0, Nature +0, Perception +0, Performance +0, Persuasion +0, Religion +0, Sleight of Hand +0, Stealth +0, Survival +0},
%damage-vulnerabilities = {cold},
%damage-resistances = {bludgeoning, piercing, and slashing from nonmagical attacks},
%damage-immunities = {poison},
%condition-immunities = {poisoned},
senses = {darkvision 60 ft., passive Perception 10},
languages = {Common, Goblin, Undercommon},
challenge = 1,
]
% Traits
\DndMonsterAction{Innate Spellcasting}
Foo's spellcasting ability is Charisma (spell save DC 12, +4 to hit with spell attacks). It can innately cast the following spells, requiring no material components:
\begin{DndMonsterSpells}
\DndInnateSpellLevel{misty step}
\DndInnateSpellLevel[3]{fog cloud, rope trick}
\DndInnateSpellLevel[1]{identify}
\end{DndMonsterSpells}
\DndMonsterAction{Spellcasting}
Foo is a 2nd-level spellcaster. Its spellcasting ability is Charisma (spell save DC 12, +4 to hit with spell attacks). It has the following sorcerer spells prepared:
\begin{DndMonsterSpells}
\DndMonsterSpellLevel{blade ward, fire bolt, light, shocking grasp}
\DndMonsterSpellLevel[1][3]{burning hands, mage armor, shield}
\end{DndMonsterSpells}
\DndMonsterSection{Actions}
\DndMonsterAction{Multiattack}
The foo makes two melee attacks.
%Default values are shown commented out
\DndMonsterAttack[
name=Dagger,
%distance=both, % valid options are in the set {both,melee,ranged},
%type=weapon, %valid options are in the set {weapon,spell}
mod=+3,
%reach=5,
%range=20/60,
%targets=one target,
dmg=\DndDice{1d4+1},
dmg-type=piercing,
%plus-dmg=,
%plus-dmg-type=,
%or-dmg=,
%or-dmg-when=,
%extra=,
]
%\DndMonsterMelee calls \DndMonsterAttack with the melee option
\DndMonsterMelee[
name=Flame Tongue Longsword,
mod=+3,
%reach=5,
%targets=one target,
dmg=\DndDice{1d8+1},
dmg-type=slashing,
plus-dmg=\DndDice{2d6},
plus-dmg-type=fire,
or-dmg=\DndDice{1d10+1},
or-dmg-when=if used with two hands,
%extra=,
]
%\DndMonsterRanged calls \DndMonsterAttack with the ranged option
\DndMonsterRanged[
name=Assassin's Light Crossbow,
mod=+1,
range=80/320,
dmg=\DndDice{1d8},
dmg-type=piercing,
%plus-dmg=,
%plus-dmg-type=,
%or-dmg=,
%or-dmg-when=,
extra={, and the target must make a DC 15 Constitution saving throw, taking 24 (7d6) poison damage on a failed save, or half as much damage on a successful one}
]
% Legendary Actions
\DndMonsterSection{Legendary Actions}
The foo can take 3 legendary actions, choosing from the options below. Only one legendary action option can be used at a time and only at the end of another creature's turn. The foo regains spent legendary actions at the start of its turn.
\begin{DndMonsterLegendaryActions}
\DndMonsterLegendaryAction{Move}{The foo moves up to its speed.}
\DndMonsterLegendaryAction{Dagger Attack}{The foo makes a dagger attack.}
\DndMonsterLegendaryAction{Create Contract (Costs 3 Actions)}{The foo presents a contract in a language it knows and waves it in the face of a creature within 10 feet. The creature must make a DC 10 Intelligence saving throw. On a failure, the creature is incapacitated until the start of the foo's next turn. A creature who cannot read the language in which the contract is written has advantage on this saving throw.}
\end{DndMonsterLegendaryActions}
\end{multicols}
\end{DndMonster}
The |DndMonster| environment is used to typeset monster and NPC stat blocks. The module supplies many functions to easily typeset the contents of the stat block
\part{Customization}
\chapter{Colors}
\begin{table*}[b]
\caption{\DndFontTableTitle{}Colors Supported by this Package}\label{tab:colors}
\begin{tabularx}{\linewidth}{lX}
\textbf{Color} & \textbf{Description} \\
\rowcolor{PhbLightGreen}
|PhbLightGreen| & Light green used in PHB Part 1 (Default) \\
\rowcolor{PhbLightCyan}
|PhbLightCyan| & Light cyan used in PHB Part 2 \\
\rowcolor{PhbMauve}
|PhbMauve| & Pale purple used in PHB Part 3 \\
\rowcolor{PhbTan}
|PhbTan| & Light brown used in PHB appendix \\
\rowcolor{DmgLavender}
|DmgLavender| & Pale purple used in DMG Part 1 \\
\rowcolor{DmgCoral}
|DmgCoral| & Orange-pink used in DMG Part 2 \\
\rowcolor{DmgSlateGray}
|DmgSlateGray| (|DmgSlateGrey|) & Blue-gray used in PHB Part 3 \\
\rowcolor{DmgLilac}
|DmgLilac| & Purple-gray used in DMG appendix \\
\rowcolor{BrGreen}
|BrGreen| & Gray-green used for tables in Basic Rules\\
\end{tabularx}
\end{table*}
This package provides several global color variables to style |DndComment|, |DndReadAloud|, |DndSidebar|, and |DndTable| environments.
\begin{DndTable}[header=Box Colors]{lX}
Color & Description \\
|commentcolor| & |DndComment| background \\
|readaloudcolor| & |DndReadAloud| background \\
|sidebarcolor| & |DndSidebar| background \\
|tablecolor| & background of even |DndTable| rows \\
\end{DndTable}
They also accept an optional color argument to set the color for a single instance. See Table~\ref{tab:colors} for a list of core book accent colors.
\begin{lstlisting}
\begin{DndTable}[color=PhbLightCyan]{cX}
d8 & Item \\
1 & Small wooden button \\
2 & Red feather \\
3 & Human tooth \\
4 & Vial of green liquid \\
5 & Loaded dice \\
6 & Tasty biscuit \\
7 & Broken axe handle \\
8 & Tarnished silver locket \\
\end{DndTable}
\end{lstlisting}
\begin{DndTable}[color=PhbLightCyan]{cX}
d8 & Item \\
1 & Small wooden button \\
2 & Red feather \\
3 & Human tooth \\
4 & Vial of green liquid \\
5 & Loaded dice \\
6 & Tasty biscuit \\
7 & Broken axe handle \\
8 & Tarnished silver locket \\
\end{DndTable}
\section{Themed Colors}
Use |\DndSetThemeColor[<color>]| to set |commentcolor|, |readaloudcolor|, |sidebarcolor|, and |tablecolor| to a specific color. Calling |\DndSetThemeColor| without an argument sets those colors to the current |themecolor|. In the following example the group limits the change to just a few boxes; after the group finishes, the colors are reverted to what they were before the group started.
\begin{lstlisting}
\begingroup
\DndSetThemeColor[PhbMauve]
\begin{DndComment}{This Comment Is in Mauve}
This comment is in the the new color.
\end{DndComment}
\begin{DndSidebar}{This Sidebar Is Also Mauve}
The sidebar is also using the new theme color.
\end{DndSidebar}
\endgroup
\end{lstlisting}
\begingroup
\DndSetThemeColor[PhbMauve]
\begin{DndComment}{This Comment Is in Mauve}
This comment is in the the new color.
\end{DndComment}
\begin{DndSidebar}{This Sidebar Is Also Mauve}
The sidebar is also using the new theme color.
\end{DndSidebar}
\endgroup
\end{document}