summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/rpg-module
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rpg-module
Initial commit
Diffstat (limited to 'macros/latex/contrib/rpg-module')
-rw-r--r--macros/latex/contrib/rpg-module/LICENSE415
-rw-r--r--macros/latex/contrib/rpg-module/README41
-rw-r--r--macros/latex/contrib/rpg-module/basic-stats.def373
-rw-r--r--macros/latex/contrib/rpg-module/basic-stats.sty399
-rw-r--r--macros/latex/contrib/rpg-module/doc/rpg-module.tex734
-rw-r--r--macros/latex/contrib/rpg-module/doc/rpg_module_cover_art.pngbin0 -> 770708 bytes
-rw-r--r--macros/latex/contrib/rpg-module/doc/rpg_module_interior_art.pngbin0 -> 1795730 bytes
-rw-r--r--macros/latex/contrib/rpg-module/doc/rpg_module_logo.pdfbin0 -> 2432 bytes
-rw-r--r--macros/latex/contrib/rpg-module/doc/rpg_module_map.pngbin0 -> 767754 bytes
-rw-r--r--macros/latex/contrib/rpg-module/examples/README.examples23
-rw-r--r--macros/latex/contrib/rpg-module/examples/b1.pdfbin0 -> 37696 bytes
-rw-r--r--macros/latex/contrib/rpg-module/examples/b1.tex301
-rw-r--r--macros/latex/contrib/rpg-module/examples/b3.pdfbin0 -> 548133 bytes
-rw-r--r--macros/latex/contrib/rpg-module/examples/b3.tex240
-rw-r--r--macros/latex/contrib/rpg-module/examples/basic.pdfbin0 -> 314028 bytes
-rw-r--r--macros/latex/contrib/rpg-module/examples/basic.tex234
-rw-r--r--macros/latex/contrib/rpg-module/examples/monster_manual.pdfbin0 -> 229154 bytes
-rw-r--r--macros/latex/contrib/rpg-module/examples/monster_manual.tex1115
-rw-r--r--macros/latex/contrib/rpg-module/examples/x2.pdfbin0 -> 977552 bytes
-rw-r--r--macros/latex/contrib/rpg-module/examples/x2.tex178
-rw-r--r--macros/latex/contrib/rpg-module/rpg-module.cls650
-rw-r--r--macros/latex/contrib/rpg-module/rpg-module.pdfbin0 -> 3322064 bytes
22 files changed, 4703 insertions, 0 deletions
diff --git a/macros/latex/contrib/rpg-module/LICENSE b/macros/latex/contrib/rpg-module/LICENSE
new file mode 100644
index 0000000000..4db9b5af29
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/LICENSE
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/macros/latex/contrib/rpg-module/README b/macros/latex/contrib/rpg-module/README
new file mode 100644
index 0000000000..1c582dd764
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/README
@@ -0,0 +1,41 @@
+--------------------------------------------------------------------------------
+rpg_module: A Role-Playing Game Module document class for LaTeX
+
+Version 1.0 2016/04/25
+
+Includes basic_stats.sty, a package to typeset monster stat blocks from the
+1981 Basic/Expert version of Dungeons and Dragons (Moldvay/Cook/Marsh)
+--------------------------------------------------------------------------------
+
+Copyright 2016 Michael C. Davis
+
+This work may be distributed and/or modified under the conditions of the LaTeX
+Project Public License version 1.3 or later. The Basic Stats style contains
+material which is licensed under the Open Gaming License version 1.0A.
+
+
+The rpg_module class is inspired by the old-school Dungeons and Dragons modules
+of the 1980s and attempts to recapture the look and feel of those classic
+adventures. In the examples directory, you will find several pages from D&D
+modules from 1981 which have been typeset with this class and which you can
+compare to the original documents.
+
+This package also includes the Basic Stats style, which contains stat blocks
+for every monster from the Moldvay/Cook/Marsh Basic/Expert version of the
+game. A future version of this class will include monster stats for Advanced
+Dungeons & Dragons/OSRIC.
+
+
+Usage: \documentclass[options]{rpg-module}
+
+See rpg_module.pdf for detailed documentation and a worked example. See
+the examples directory for further examples.
+
+
+The author can be contacted at Dragonsfoot, user: slithy
+
+http://www.dragonsfoot.org/forums/memberlist.php?mode=viewprofile&u=7317
+
+Technical support is provided on Dragonsfoot Forums:
+
+http://www.dragonsfoot.org/forums/viewtopic.php?f=87&t=73823
diff --git a/macros/latex/contrib/rpg-module/basic-stats.def b/macros/latex/contrib/rpg-module/basic-stats.def
new file mode 100644
index 0000000000..ca62938886
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/basic-stats.def
@@ -0,0 +1,373 @@
+%% basic-stats.def
+%
+% Basic stats for the Role-Playing Game Module class
+%
+% Copyright 2016 Michael C. Davis
+%
+% LICENSE FOR THE WORK
+%
+% This work consists of the following files:
+% rpg-module.cls
+% basic-stats.sty
+% basic-stats.def
+% doc/rpg-module.tex
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version. The latest version of this license can be found at:
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `author-maintained'.
+%
+% The Author and Maintainer of this work is Michael C. Davis
+%
+%
+% OPEN GAME LICENSE
+%
+% The monster stats in this file are copyright 2000, Wizards of the Coast, Inc.
+% and are distributed with permission under the terms of the Open Game License v 1.0.
+% See the file rpg-module.cls or the compiled documentation file rpg-module.pdf for
+% the full text of the license.
+%
+%
+% LICENSE FOR COMPILED WORKS
+%
+% You may distribute compiled works generated using the work as specified in
+% Clause 3 of the LaTeX Project Public License. If you incorporate Open Gaming
+% Content into the compiled work, you must also comply with the terms of that
+% license.
+%
+%
+% USAGE
+%
+% See the file rpg-module.pdf (source file doc/rpg-module.tex) for documentation.
+% There are a number of worked examples in the examples/ directory.
+%
+% Technical support is provided on Dragonsfoot Forums:
+%
+% http://www.dragonsfoot.org/forums/viewtopic.php?f=87&t=73823
+
+
+\monster{ant}{Driver Ant}{Ant||3|4*|180'|60'||||1|1 mandibles|2d6|2d6|Fighter: 2|7 (12)|Neutral|2--8|4--24|U or special|125}
+\monster{white_ape}{White Ape}{Ape||6|4|120'|40'||||2|2 claws|1d4\x 2|1d4\?1d4|Fighter: 2|7|Neutral|1--6|2--8|Nil|75}
+\monster{basilisk}{Basilisk}{||4|6+1**|60'|20'||||1+gaze|1 bite\+gaze|1d10+special|1d10\+petrification|Fighter: 6|9|Neutral|1--6|1--6|F|950}
+\monster{bat}{Bat}{Bat||6|1 hp|9'|3'|Fly|120'|40'|special|Confusion|Nil|Nil|Normal Man|6|Neutral|1--100|1--100|Nil|5}
+\monster{giant_bat}{Giant Bat}{Bat||6|2|30'|10'|Fly|180'|60'|1|1 bite|1d4|1d4|Fighter: 1|8|Neutral|1--10|1--10|Nil|20}
+\monster{vampire_bat}{Giant Vampire Bat}{Bat||6|2|30'|10'|Fly|180'|60'|1|1 bite|1d4+special|1d4\+blood drain|Fighter: 1|8|Neutral|1--10|1--10|Nil|20}
+\monster{black_bear}{Black Bear}{Bear||6|4|120'|40'||||3|2 claws\?1 bite|1d3\x 2/1d6|1d3\?1d3\?1d6|Fighter: 2|7|Neutral|1--4|1--4|U|75}
+\monster{cave_bear}{Cave Bear}{Bear||5|7|120'|40'||||3|2 claws\?1 bite|1d8\x 2/2d6|1d8\?1d8\?2d6|Fighter: 3|9|Neutral|1--2|1--2|V|450}
+\monster{grizzly_bear}{Grizzly Bear}{Bear||6|5|120'|40'||||3|2 claws\?1 bite|1d4\x 2/1d8|1d4\?1d4\?1d8|Fighter: 2|8|Neutral|1|1--4|U|175}
+\monster{polar_bear}{Polar Bear}{Bear||6|6|120'|40'||||3|2 claws\?1 bite|1d6\x 2/1d10|1d6\?1d6\?1d10|Fighter: 3|8|Neutral|1|1--2|U|275}
+\monster{bee}{Killer Bee}{Bee||7|\half*|150'|50'||||1|1 sting|1d3+special|1d3\+special|Fighter: 1|9|Neutral|1--6|5--30|Special|6}
+\monster{fire_beetle}{Giant Fire Beetle}{Beetle||4|1+2|120'|40'||||1|1 bite|2d4|2d4|Fighter: 1|7|Neutral|1--8|2--12|Nil|15}
+\monster{oil_beetle}{Giant Oil Beetle}{Beetle||4|2*|120'|40'||||1+special|1~bite\+special|1d6+special|1d6\+special|Fighter: 1|8|Neutral|1--8|2--12|Nil|25}
+\monster{tiger_beetle}{Giant Tiger Beetle}{Beetle||3|3+1|150'|50'||||1|1 bite|2d6|2d6|Fighter: 1|9|Neutral|1--6|2--8|U|50}
+\monster{black_pudding}{Black Pudding}{|*|6|10*|60'|20'||||1|1|3d8|3d8|Fighter: 5|12|Neutral|1|0|Nil|1600}
+\monster{blink_dog}{Blink Dog}{||5|4*|120'|40'||||1|1 bite|1d6|1d6|Fighter: 4|6|Lawful|1--6|1--6|C|125}
+\monster{boar}{Boar}{||7|3|150'|50'||||1|1 tusk|2d4|2d4|Fighter: 2|9|Neutral|1--6|1--6|Nil|35}
+\monster{bugbear}{Bugbear}{||5|3+1|90'|30'||||1|1 weapon|2d4|2d4 or by weapon\+1|Fighter: 3|9|Chaotic|2--8|5--20|B|50}
+\monster[Caeciliae]{caecilia}{Caecilia}{||6|6*|60'|20'||||1|1 bite|1d8|1d8|Fighter: 3|9|Neutral|1--3|1--3|B|500}
+\monster{camel}{Camel}{||7|2|150'|50'||||2|1 bite\?1 hoof|1/1d4|1\?1d4|Fighter: 1|7|Neutral|0|2--8|Nil|20}
+\monster{carrion_crawler}{Carrion Crawler}{||7|3+1*|120'|40'||||8|8 tentacles|paralysis|Paralysis|Fighter: 2|9|Neutral|1--3|1--3|B|75}
+\monster{lion}{Lion}{Cat, Great||6|5|150'|50'||||3|2 claws\?1 bite|1d4+1\x 2/1d10|1d4+1\?1d4+1\?1d10|Fighter: 3|9|Neutral|1--4|1--8|U|175}
+\monster{mountain_lion}{Mountain Lion}{Cat, Great||6|3+2|150'|50'||||3|2 claws\?1 bite|1d3\x 2/1d6|1d3\?1d3\?1d6|Fighter: 2|8|Neutral|1--4|1--4|U|50}
+\monster{panther}{Panther}{Cat, Great||4|4|210'|70'||||3|2 claws\?1 bite|1d4\x 2/1d8|1d4\?1d4\?1d8|Fighter: 2|8|Neutral|1--2|1--6|U|75}
+\monster{sabre_tooth_tiger}{Sabre-tooth Tiger}{Cat, Great||6|8|150'|50'||||3|2 claws\?1 bite|1d8\x 2/2d8|1d8\?1d8\?2d8|Fighter: 4|10|Neutral|1--4|1--4|V|650}
+\monster{tiger}{Tiger}{Cat, Great||6|6|150'|50'||||3|2 claws\?1 bite|1d6\x 2/2d6|1d6\?1d6\?2d6|Fighter: 3|9|Neutral|1|1--3|U|275}
+\monster{cave_locust}{Cave Locust}{||4|2|60'|20'|Fly|180'|60'|1/1/1|1 bite or 1 bump or 1 spit|1d2/1d4/special|1d2 or 1d4 or special|Fighter: 2|5|Neutral|2--20|1--10|Nil|20}
+\monster{centaur}{Centaur}{||5|4|180'|60'||||3|2 hooves\?1 weapon|1d6\x 3|1d6\?1d6\?1d6 or by weapon|Fighter: 4|8|Neutral|0|2--20|A|75}
+\monster{centipede}{Giant Centipede}{Centipede||9|\half*|60'|20'||||1|1 bite|poison|Poison|Normal Man|7|Neutral|2--8|1--8|Nil|6}
+\monster[Chimerae]{chimera}{Chimera}{||4|9**|120'|40'|Fly|180'|60'|5+breath|2 claws\?3 heads\+special|1d3\x 2/2d4\x 2/3d4|1d3\?1d3\?2d4\?2d4\?3d4\+special|Fighter: 9|9|Chaotic|1--2|1--4|F|2300}
+\monster{cockatrice}{Cockatrice}{||6|5**|90'|30'|Fly|180'|60'|1|1 beak\+special|1d6+special|1d6\+petrification|Fighter: 5|7|Neutral|1--4|1--8|D|45}
+\monster{crab}{Giant Crab}{Crab||2|3|60'|20'||||2|2 pincers|2d6\x 2|2d6\?2d6|Fighter: 2|7|Neutral|1--2|1--6|Nil|35}
+\monster{crocodile}{Crocodile}{Crocodile||5|2|90'|30'|Swim|90'|30'|1|1 bite|1d8|1d8|Fighter: 1|7|Neutral|0|1--8|Nil|20}
+\monster{large_crocodile}{Large Crocodile}{Crocodile||3|6|90'|30'|Swim|90'|30'|1|1 bite|2d8|2d8|Fighter: 3|7|Neutral|0|1--4|Nil|275}
+\monster{giant_crocodile}{Giant Crocodile}{Crocodile||1|15|90'|30'|Swim|90'|30'|1|1 bite|3d8|3d8|Fighter: 8|9|Neutral|0|1--3|Nil|1350}
+\monster[Cyclopes]{cyclops}{Cyclops}{||5|13*|90'|30'||||1/1|1 club or hurl rocks|3d10/3d6|3d10 or 3d6|Fighter: 13|9|Chaotic|1|1--4|E\+5,000gp|2300}
+\monster{stegosaurus}{Stegosaurus}{Dinosaur||3|11|60'|20'||||1/1|tail or trample|2d8|2d8 or 2d8|Fighter: 6|7|Neutral|0|1--4|Nil|1100}
+\monster[Triceratops]{triceratops}{Triceratops}{Dinosaur||2|11|90'|30'||||1/1|gore or trample|3d6|3d6 or 3d6|Fighter: 6|8|Neutral|0|1--4|Nil|1100}
+\monster[Tyrannosaurus Rexes]{tyrannosaurus_rex}{Tyrannosaurus Rex}{Dinosaur||3|20|120'|40'||||1|1 bite|6d6|6d6|Fighter: 10|11|Neutral|0|1|V\,(\x 3)|2}
+\monster{displacer_beast}{Displacer Beast}{||4|6*|150'|50'||||2|2 tentacles|2d4\x 2|2d4\?2d4|Fighter: 6|8|Neutral|1--4|1--4|D|500}
+\monster[Lesser Djinn]{djinni}{Lesser Djinni}{Djinni|*|5|7+1|90'|30'|Fly|240'|80'|1+special|1\+special|2d8/2d6|2d8 (fists) or 2d6 (whirlwind)|Fighter: 14|12|Neutral|1|1|Nil|450}
+\monster{doppleganger}{Doppleganger}{||5|4*|90'|30'||||1|1|1d12|1d12|Fighter: 10|10|Chaotic|1--6|1--6|E|125}
+\monster{dragon_turtle}{Dragon Turtle}{||\minus 2|30|30'|10'|Swim|90'|30'|3|2 claws\?1 bite|1d8\x 2/10d6|1d8\?1d8\?10d6|Fighter: 15|10|Chaotic|0|1|H|4750}
+\monster{black_dragon}{Black Dragon}{Dragon||2|7**|90'|30'|Fly|240'|80'|3+breath|2 claws\?1 bite\+breath|1d4+1\x 2/2d10|1d4+1\?1d4+1\?2d10|Fighter: 7|8|Chaotic|1--4|1--4|H|1250}
+\monster{blue_dragon}{Blue Dragon}{Dragon||0|9**|90'|30'|Fly|240'|80'|3+breath|2 claws\?1 bite\+breath|1d6+1\x 2/3d10|1d6+1\?1d6+1\?3d10|Fighter: 9|9|Neutral|1--4|1--4|H|2300}
+\monster{gold_dragon}{Gold Dragon}{Dragon||\minus 2|11**|90'|30'|Fly|240'|80'|3+breath|2 claws\?1 bite\+breath|2d4\x 2/6d6|2d4\?2d4\?6d6|Fighter: 11|10|Lawful|1--4|1--4|H|2700}
+\monster{green_dragon}{Green Dragon}{Dragon||1|8**|90'|30'|Fly|240'|80'|3+breath|2 claws\?1 bite\+breath|1d6\x 2/3d8|1d6\?1d6\?3d8|Fighter: 8|9|Chaotic|1--4|1--4|H|1750}
+\monster{red_dragon}{Red Dragon}{Dragon||\minus 1|10**|90'|30'|Fly|240'|80'|3+breath|2 claws\?1 bite\+breath|1d8\x 2/4d8|1d8\?1d8\?4d8|Fighter: 10|10|Chaotic|1--4|1--4|H|2300}
+\monster{white_dragon}{White Dragon}{Dragon||3|6**|90'|30'|Fly|240'|80'|3+breath|2 claws\?1 bite\+breath|1d4\x 2/2d8|1d4\?1d4\?2d8|Fighter: 6|8|Neutral|1--4|1--4|H|725}
+\monster{dryad}{Dryad}{||5|2*|120'|40'||||charm|Charm|Nil|Nil|Fighter: 4|6|Neutral|0|1--6|D|25}
+\monster[Dwarves]{dwarf}{Dwarf}{||4|1|60'|20'||||1|1 weapon|1d8|1d8 or by weapon|Dwarf: 1|8|Any|1--6|5--40|G|10}
+\monster[Lesser Efreet]{efreeti}{Lesser Efreeti}{Efreeti|*|3|10*|90'|30'|Fly|240'|80'|1|flame|2d8|2d8|Fighter: 15|12|Chaotic|1|1|Nil|1600}
+\monster{air_elemental}{Air Elemental}{Elemental|*|0|12|Fly 360'|120'||||1|whirlwind|2d8|2d8|Fighter: 12|10|Neutral|1|1|Nil|1100}
+\monster{earth_elemental}{Earth Elemental}{Elemental|*|0|12|60'|20'||||1|fists|2d8|2d8|Fighter: 12|10|Neutral|1|1|Nil|1100}
+\monster{fire_elemental}{Fire Elemental}{Elemental|*|0|12|120'|40'||||1|flame|2d8|2d8|Fighter: 12|10|Neutral|1|1|Nil|1100}
+\monster{water_elemental}{Water Elemental}{Elemental|*|0|12|60'|20'|Swim|180'|60'|1|wave|2d8|2d8|Fighter: 12|10|Neutral|1|1|Nil|1100}
+\monster{greater_air_elemental}{Greater Air Elemental}{Elemental|*|\minus 2|16|Fly 360'|120'||||1|whirlwind|3d8|3d8|Fighter: 16|10|Neutral|1|1|Nil|1350}
+\monster{greater_earth_elemental}{Greater Earth Elemental}{Elemental|*|\minus 2|16|60'|20'||||1|fists|3d8|3d8|Fighter: 16|10|Neutral|1|1|Nil|1350}
+\monster{greater_fire_elemental}{Greater Fire Elemental}{Elemental|*|\minus 2|16|120'|40'||||1|flame|3d8|3d8|Fighter: 16|10|Neutral|1|1|Nil|1350}
+\monster{greater_water_elemental}{Greater Water Elemental}{Elemental|*|\minus 2|16|60'|20'|Swim|180'|60'|1|wave|3d8|3d8|Fighter: 16|10|Neutral|1|1|Nil|1350}
+\monster{lesser_air_elemental}{Lesser Air Elemental}{Elemental|*|2|8|Fly 360'|120'||||1|whirlwind|1d8|1d8|Fighter: 8|10|Neutral|1|1|Nil|650}
+\monster{lesser_earth_elemental}{Lesser Earth Elemental}{Elemental|*|2|8|60'|20'||||1|fists|1d8|1d8|Fighter: 8|10|Neutral|1|1|Nil|650}
+\monster{lesser_fire_elemental}{Lesser Fire Elemental}{Elemental|*|2|8|120'|40'||||1|flame|1d8|1d8|Fighter: 8|10|Neutral|1|1|Nil|650}
+\monster{lesser_water_elemental}{Lesser Water Elemental}{Elemental|*|2|8|60'|20'|Swim|180'|60'|1|wave|1d8|1d8|Fighter: 8|10|Neutral|1|1|Nil|650}
+\monster{elephant}{Elephant}{||5|9|120'|40'||||2/1|2 tusks or 1 trample|2d4\x 2/4d8|2d4\?2d4 or 4d8|Fighter: 5|8|Neutral|0|1--20|Special|900}
+\monster[Elves]{elf}{Elf}{||5|1+1*|120'|40'||||1|1 weapon|1d8|1d8 or by weapon|Elf: 1|8|Neutral|1--4|2--24|E|19}
+\monster{ferret}{Giant Ferret}{Ferret||5|1+1|150'|50'||||1|1 bite|1d8|1d8|Fighter: 1|8|Neutral|1--8|1--12|Nil|15}
+\monster[Giant Catfish]{catfish}{Giant Catfish}{Fish||4|8+3*|Swim 90'|30'||||5|1 bite\?4 feelers|2d8/1d4\x 4|2d8\?1d4\x 4|Fighter: 4|8|Neutral|0|1--2|Nil|1200}
+\monster{piranha}{Giant Piranha}{Fish||6|3+3|Swim 150'|50'||||1|1 bite|1d8|1d8|Fighter: 2|7|Neutral|0|2--8|Nil|50}
+\monster[Giant Rockfish]{rockfish}{Giant Rockfish}{Fish||7|5+5|Swim 180'|60'||||4|4 spines+poison|1d4\x 4+poison|1d4\x 4\+poison|Fighter: 3|8|Neutral|0|2--8|Nil|225}
+\monster[Giant Sturgeon]{sturgeon}{Giant Sturgeon}{Fish||0|10+2*|Swim 180'|60'||||1|1 bite|2d10+swallow|2d10\+swallow whole|Fighter: 5|9|Neutral|0|1|Nil|1600}
+\monster{gargoyle}{Gargoyle}{|*|5|4|90'|30'|Fly|150'|50'|4|2 claws\?1 bite\?1 horn|1d3\x 2/1d6/1d4|1d3\?1d3\?1d6\?1d4|Fighter: 8|11|Chaotic|1--6|2--8|C|75}
+\monster{gelatinous_cube}{Gelatinous Cube}{||8|4*|60'|20'||||1|1|2d4+special|2d4\+special|Fighter: 2|12|Neutral|1|0|V|125}
+\monster{ghoul}{Ghoul}{||6|2*|90'|30'||||3|2 claws\?1 bite|1d3\x 3+special|1d3\?1d3\?1d3\+special|Fighter: 2|9|Chaotic|1--6|2--16|B|25}
+\monster{cloud_giant}{Cloud Giant}{Giant||4|12+3|120'|40'||||1|1|6d6|6d6|Fighter: 12|10|Neutral|1--2|1--3|E\+5,000gp|1100}
+\monster{fire_giant}{Fire Giant}{Giant||4|11+2|120'|40'||||1|1|5d6|5d6|Fighter: 11|9|Chaotic|1--2|1--3|E\+5,000gp|1100}
+\monster{frost_giant}{Frost Giant}{Giant||4|10+1|120'|40'||||1|1|4d6|4d6|Fighter: 10|9|Chaotic|1--2|1--4|E\+5,000gp|900}
+\monster{hill_giant}{Hill Giant}{Giant||4|8|120'|40'||||1|1|2d8|2d8|Fighter: 8|8|Chaotic|1--4|2--8|E\+5,000gp|650}
+\monster{stone_giant}{Stone Giant}{Giant||4|9|120'|40'||||1|1|3d6|3d6|Fighter: 9|9|Neutral|1--2|1--6|E\+5,000gp|900}
+\monster{storm_giant}{Storm Giant}{Giant||2|15|150'|50'||||1+special|1+special|8d6+special|8d6\+special|Fighter: 15|10|Lawful|1|1--3|E\+5,000gp|1350}
+\monster{gnoll}{Gnoll}{||5|2|90'|30'||||1|1 weapon|2d4|2d4 or by weapon\+1|Fighter: 2|8|Chaotic|1--6|3--18|D|20}
+\monster{gnome}{Gnome}{||5|1|60'|20'||||1|1 weapon|1d6|1d6 or by weapon|Dwarf: 1|8 (10)|Any|1--8|5--40|C|10}
+\monster{goblin}{Goblin}{||6|1\minus 1|60'|20'||||1|1 weapon|1d6|1d6 or by weapon|Normal Man|7 (9)|Chaotic|2--8|6--60|R (C)|5}
+\monster{amber_golem}{Amber Golem}{Golem|*|6|10**|180'|60'||||3|2 claws\?1 bite|2d6\x 2/2d10|2d6\?2d6\?2d10|Fighter: 5|12|Neutral|1|1|Nil|2300}
+\monster{bone_golem}{Bone Golem}{Golem|*|2|8|120'|40'||||4|4 weapons|1d8\x 4|1d8\x 4 or by weapons|Fighter: 4|12|Neutral|1|1|Nil|650}
+\monster{bronze_golem}{Bronze Golem}{Golem|*|0|20**|240'|80'||||1+special|1 fist+special|3d10+special|3d10\+special|Fighter: 10|12|Neutral|1|1|Nil|4300}
+\monster{wood_golem}{Wood Golem}{Golem|*|7|2+2|120'|40'||||1|1 fist|1d8|1d8|Fighter: 1|12|Neutral|1|1|Nil|25}
+\monster{gorgon}{Gorgon}{||2|8*|120'|40'||||1+breath|1 gore or breath|2d6/special|2d6 or petrification|Fighter: 8|8|Chaotic|1--2|1--4|E|1200}
+\monster{gray_ooze}{Gray Ooze}{||8|3*|10'|3'||||1|1|2d8|2d8|Fighter: 2|12|Neutral|1|1|Nil|50}
+\monster{green_slime}{Green Slime}{|*|---|2*|3'|1'||||1|1|special|Special|Fighter: 1|12|Neutral|1|0|Nil|25}
+\monster{grey_ooze}{Grey Ooze}{||8|3*|10'|3'||||1|1|2d8|2d8|Fighter: 2|12|Neutral|1|1|Nil|50}
+\monster{griffon}{Griffon}{||5|7|120'|40'|Fly|360'|120'|3|2 claws\?1 bite|1d4\x 2/2d8|1d4\?1d4\?2d8|Fighter: 4|8|Neutral|0|2--16|E|450}
+\monster{halfling}{Halfling}{||7|1\minus 1|90'|30'||||1|1 weapon|1d6|1d6 or by weapon|Halfling: 1|7|Lawful|3--18|5--40|V (B)|5}
+\monster{harpy}{Harpy}{||7|3*|60'|20'|Fly|150'|50'|3+charm|2 claws\?1 weapon\+charm|1d4\x 2/1d6|1d4\?1d4\?1d6|Fighter: 3|7|Chaotic|1--6|2--8|C|50}
+\monster{hawk_giant}{Giant Hawk}{Hawk||6|3+3|450'|150'||||1|1|1d6|1d6|Fighter: 2|8|Neutral|0|1--3|Nil|50}
+\monster{hawk}{Hawk}{Hawk||8|\half|480'|160'||||1|1|1d2|1d2|Normal Man|7|Neutral|0|1--6|Nil|5}
+\monster{hellhound}{Hellhound}{Hellhound||4|3*|120'|40'||||1+breath|bite or breath|1d6/3d6|1d6 or 3d6|Fighter: 3|9|Chaotic|2--8|2--8|C|50}
+\monster{hellhound_3}{Minor Hellhound}{Hellhound||4|3*|120'|40'||||1+breath|bite or breath|1d6/3d6|1d6 or 3d6|Fighter: 3|9|Chaotic|2--8|2--8|C|50}
+\monster{hellhound_4}{Lesser Hellhound}{Hellhound||4|4*|120'|40'||||1+breath|bite or breath|1d6/4d6|1d6 or 4d6|Fighter: 4|9|Chaotic|2--8|2--8|C|125}
+\monster{hellhound_5}{Hellhound}{Hellhound||4|5*|120'|40'||||1+breath|bite or breath|1d6/5d6|1d6 or 5d6|Fighter: 5|9|Chaotic|2--8|2--8|C|300}
+\monster{hellhound_6}{Greater Hellhound}{Hellhound||4|6*|120'|40'||||1+breath|bite or breath|1d6/6d6|1d6 or 6d6|Fighter: 6|9|Chaotic|2--8|2--8|C|500}
+\monster{hellhound_7}{Monstrous Hellhound}{Hellhound||4|7*|120'|40'||||1+breath|bite or breath|1d6/7d6|1d6 or 7d6|Fighter: 7|9|Chaotic|2--8|2--8|C|850}
+\monster{antelope}{Antelope}{Herd Animal||7|1|240'|80'||||1|1 butt|1d4|1d4|Fighter: 1|5|Neutral|0|3--30|Nil|10}
+\monster{goat}{Goat}{Herd Animal||7|1|240'|80'||||1|1 butt|1d6|1d6|Fighter: 1|5|Neutral|0|3--30|Nil|10}
+\monster[Deer]{deer}{Deer}{Herd Animal||7|2|240'|80'||||1|1 butt|1d4|1d4|Fighter: 2|5|Neutral|0|3--30|Nil|20}
+\monster[Caribou]{caribou}{Caribou}{Herd Animal||7|3|240'|80'||||1|1 butt|1d6|1d6|Fighter: 2|5|Neutral|0|3--30|Nil|35}
+\monster[Oxen]{ox}{Ox}{Herd Animal||7|3|240'|80'||||1|1 butt|1d8|1d8|Fighter: 2|5|Neutral|0|3--30|Nil|35}
+\monster[Elk]{elk}{Elk}{Herd Animal||7|4|240'|80'||||1|1 butt|1d8|1d8|Fighter: 2|5|Neutral|0|3--30|Nil|75}
+\monster[Moose]{moose}{Moose}{Herd Animal||7|4|240'|80'||||1|1 butt|1d8|1d8|Fighter: 2|5|Neutral|0|3--30|Nil|75}
+\monster{hippogriff}{Hippogriff}{||5|3+1|180'|60'|Fly|360'|120'|3|2 claws\?1 bite|1d6\x 2/1d10|1d6\?1d6\?1d10|Fighter: 2|8|Neutral|0|2--16|Nil|50}
+\monster{hobgoblin}{Hobgoblin}{||6|1+1|90'|30'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 1|8 (10)|Chaotic|1--6|4--24|D|15}
+\monster{draft_horse}{Draft Horse}{Horse||7|3|90'|30'||||0|Nil|Nil|Nil|Fighter: 2|6|Neutral|0|domestic only|Nil|35}
+\monster{riding_horse}{Riding Horse}{Horse||7|2|240'|80'||||2|2 hooves|1d4\x 2|1d4\?1d4|Fighter: 1|7|Neutral|0|10--100|Nil|20}
+\monster{war_horse}{War Horse}{Horse||7|3|120'|40'||||2|2 hooves|1d6\x 2|1d6\?1d6|Fighter: 2|9|Neutral|0|domestic only|Nil|35}
+\monster[Five-Headed Hydrae]{hydra}{Five-Headed Hydra}{Hydra||5|5|120'|40'||||5|5 heads|1d10\x 5|1d10 each|Fighter: 5|9|Neutral|1|1|B|175}
+\monster[Five-Headed Hydrae]{hydra_5}{Five-Headed Hydra}{Hydra||5|5|120'|40'||||5|5 heads|1d10\x 5|1d10 each|Fighter: 5|9|Neutral|1|1|B|175}
+\monster[Six-Headed Hydrae]{hydra_6}{Six-Headed Hydra}{Hydra||5|6|120'|40'||||6|6 heads|1d10\x 6|1d10 each|Fighter: 6|9|Neutral|1|1|B|275}
+\monster[Seven-Headed Hydrae]{hydra_7}{Seven-Headed Hydra}{Hydra||5|7|120'|40'||||7|7 heads|1d10\x 7|1d10 each|Fighter: 7|9|Neutral|1|1|B|450}
+\monster[Eight-Headed Hydrae]{hydra_8}{Eight-Headed Hydra}{Hydra||5|8|120'|40'||||8|8 heads|1d10\x 8|1d10 each|Fighter: 8|9|Neutral|1|1|B|650}
+\monster[Nine-Headed Hydrae]{hydra_9}{Nine-Headed Hydra}{Hydra||5|9|120'|40'||||9|9 heads|1d10\x 9|1d10 each|Fighter: 9|9|Neutral|1|1|B|900}
+\monster[Ten-Headed Hydrae]{hydra_10}{Ten-Headed Hydra}{Hydra||5|10|120'|40'||||10|10 heads|1d10\x 10|1d10 each|Fighter: 10|9|Neutral|1|1|B|900}
+\monster[Eleven-Headed Hydrae]{hydra_11}{Eleven-Headed Hydra}{Hydra||5|11|120'|40'||||11|11 heads|1d10\x 11|1d10 each|Fighter: 11|9|Neutral|1|1|B|1100}
+\monster[Twelve-Headed Hydrae]{hydra_12}{Twelve-Headed Hydra}{Hydra||5|12|120'|40'||||12|12 heads|1d10\x 12|1d10 each|Fighter: 12|9|Neutral|1|1|B|1100}
+\monster{insect_swarm}{Insect Swarm}{Insect Swarm||7|2|30'|10'|Fly|60'|20'|swarm|1 swarm|2|2 points|Normal Man|11|Neutral|1|1--3|Nil|20}
+\monster{insect_swarm_2}{Small Insect Swarm}{Insect Swarm||7|2|30'|10'|Fly|60'|20'|swarm|1 swarm|2|2 points|Normal Man|11|Neutral|1|1--3|Nil|20}
+\monster{insect_swarm_3}{Insect Swarm}{Insect Swarm||7|3|30'|10'|Fly|60'|20'|swarm|1 swarm|2|2 points|Normal Man|11|Neutral|1|1--3|Nil|35}
+\monster{insect_swarm_4}{Large Insect Swarm}{Insect Swarm||7|4|30'|10'|Fly|60'|20'|swarm|1 swarm|2|2 points|Normal Man|11|Neutral|1|1--3|Nil|75}
+\monster{invisible_stalker}{Invisible Stalker}{||3|8*|120'|40'||||1|1|4d4|4d4|Fighter: 8|12|Neutral|1|1|Nil|1200}
+\monster{kobold}{Kobold}{||7|\half|60'|20'||||1|1 weapon|1d4|1d4 or by weapon\minus 1|Normal Man|6 (8)|Chaotic|4--16|6--60|P (J)|5}
+\monster[Giant Leeches]{leech}{Giant Leech}{Leech||7|6|90'|30'||||1|blood suck|1d6+special|1d6\+blood drain|Fighter: 3|10|Neutral|0|1--4|Nil|275}
+\monster{living_crystal_statue}{Crystal Living Statue}{Living Statue||4|3|90'|30'||||2|2 fists|1d6\x 2|1d6\?1d6|Fighter: 3|11|Lawful|1--6|1--6|Nil|35}
+\monster{living_iron_statue}{Iron Living Statue}{Living Statue||2|4|30'|10'||||2|2 fists|1d8\x 2+special|1d8\?1d8\+special|Fighter: 4|11|Neutral|1--4|1--4|Nil|75}
+\monster{living_rock_statue}{Rock Living Statue}{Living Statue||4|5**|60'|20'||||2|2 magma|2d6\x 2|2d6\?2d6|Fighter: 5|11|Chaotic|1--3|1--3|Nil|45}
+\monster[Lizard Men]{lizard_man}{Lizard Man}{||5|2+1|60'|20'|Swim|120'|40'|1|1 weapon|1d6+1|1d6+1 or by weapon\+1|Fighter: 2|12|Neutral|2--8|6--36|D|25}
+\monster{draco}{Giant Draco}{Lizard||5|4+2|120'|40'|Fly|210'|70'|1|1 bite|1d10|1d10|Fighter: 3|7|Neutral|1--4|1--8|U|125}
+\monster{gecko}{Giant Gecko}{Lizard||5|3+1|120'|40'||||1|1 bite|1d8|1d8|Fighter: 2|7|Neutral|1--6|1--10|U|50}
+\monster{horned_chameleon}{Giant Horned Chameleon}{Lizard||2|5*|120'|40'||||2|1 bite\?1 horn|2d4/1d6|2d4\?1d6|Fighter: 3|7|Neutral|1--3|1--6|U|35}
+\monster{tuatara}{Giant Tuatara}{Lizard||4|6|90'|30'||||3|2 claws\?1 bite|1d4\x 2/2d6|1d4\?1d4\?2d6|Fighter: 4|6|Neutral|1--2|1--4|V|275}
+\monster[Devil Swine]{devil_swine}{Devil Swine}{Lycanthrope|*|3\,(9)|9*|180'|60'|as human|120'|40'|1/1+charm|1 gore or weapon\+charm|2d6/1d8|2d6 or by weapon|Fighter: 9|10|Chaotic|1--3|1--4|C|1600}
+\monster{werebear}{Werebear}{Lycanthrope|*|2\,(8)|6*|120'|40'||||3|2 claws\?1 bite|2d4\x 2/2d8|2d4\?2d4\?2d8|Fighter: 6|10|Neutral|1--4|1--4|C|500}
+\monster{wereboar}{Wereboar}{Lycanthrope|*|4\,(9)|4+1*|150'|50'||||1|1 tusk-bite|2d6|2d6|Fighter: 4|9|Neutral|1--4|2--8|C|200}
+\monster{wererat}{Wererat}{Lycanthrope|*|7\,(9)|3*|120'|40'||||1/1|1 bite or weapon|1d4/1d6|1d4 or by weapon|Fighter: 3|8|Chaotic|1--8|2--16|C|50}
+\monster{weretiger}{Weretiger}{Lycanthrope|*|3\,(9)|5*|150'|50'||||3|2 claws\?1 bite|1d6\x 2/2d6|1d6\?1d6\?2d6|Fighter: 5|9|Neutral|1--4|1--4|C|35}
+\monster[Werewolves]{werewolf}{Werewolf}{Lycanthrope|*|5\,(9)|4*|180'|60'||||1|1 bite|2d4|2d4|Fighter: 4|8|Chaotic|1--6|2--12|C|125}
+\monster{manticore}{Manticore}{||4|6+1|120'|40'|Fly|180'|60'|3/1|2 claws\?1 bite or spikes|1d4\x 2/2d4/special|1d4\?1d4\?2d4 or special|Fighter: 6|9|Chaotic|1--2|1--4|D|350}
+\monster{mastodon}{Mastodon}{||3|15|120'|40'||||2/1|2 tusks or 1 trample|2d6\x 2/4d8|2d6\?2d6 or 4d8|Fighter: 8|8|Neutral|0|2--16|Special|1350}
+\monster[Medusae]{medusa}{Medusa}{||8|4**|90'|30'||||1+special|1 snakebite\+special|1d6+poison|1d6\+poison|Fighter: 4|8|Chaotic|1--3|1--4|F|175}
+\monster{acolyte}{Acolyte}{Men||2|1|60'|20'||||1|1 mace|1d6|1d6|Cleric: 1|7|Any|1--8|1--20|U|10}
+\monster{bandit}{Bandit}{Men||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Thief: 1|8|Neutral|1--8|3--30|U (A)|10}
+\monster{berserker}{Berserker}{Men||7|1+1*|120'|40'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 1|12|Neutral|1--6|3--30|P (B)|19}
+\monster{brigand}{Brigand}{Men||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Chaotic|0|10--40|A|10}
+\monster{brigand_chain}{Brigand}{Men||4|1|90'|30'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Chaotic|0|10--40|A|10}
+\monster{buccaneer}{Buccaneer}{Men||7|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|6|Neutral|0|special|A|10}
+\monster{buccaneer_chain}{Buccaneer}{Men||5|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|6|Neutral|0|special|A|10}
+\monster[Dervishes]{dervish}{Dervish}{Men||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|10|Lawful|0|20--70|A|10}
+\monster[Dervishes]{dervish_chain}{Dervish}{Men||4|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|10|Lawful|0|20--70|A|10}
+\monster{medium}{Medium}{Men||9|1**|120'|40'||||1/spell|1 dagger or spell|1d4|1d4 or spell|Magic-User: 1|7|Any|1--4|1--12|V|16}
+\monster{merchant}{Merchant}{Men||5|1|90'|30'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|6 or variable|Neutral|0|1--20|A|10}
+\monster{noble}{Noble}{Men||2|3|60'|20'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 3|8|Any|2--12|2--12|V\,(\x 3)|35}
+\monster{nomad}{Nomad}{Men||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Neutral|0|10--40|A|10}
+\monster{nomad_chain}{Nomad}{Men||4|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Neutral|0|10--40|A|10}
+\monster{normal_human}{Normal Human}{Men||9|\half|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Normal Man|6|Any|1--4|1--20|U|5}
+\monster{pirate}{Pirate}{Men||7|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|7|Chaotic|0|special|A|10}
+\monster{pirate_chain}{Pirate}{Men||5|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|7|Chaotic|0|special|A|10}
+\monster{trader}{Trader}{Men||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|7|Any|1--8|3--18|U, V|10}
+\monster{veteran}{Veteran}{Men||2|1|60'|20'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 1|9 or variable|Any|2--8|2--12|V|10}
+\monster{veteran_1}{Veteran}{Men||2|1|60'|20'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 1|9 or variable|Any|2--8|2--12|V|10}
+\monster{veteran_2}{Veteran}{Men||2|2|60'|20'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 2|9 or variable|Any|2--8|2--12|V|20}
+\monster{veteran_3}{Veteran}{Men||2|3|60'|20'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 3|9 or variable|Any|2--8|2--12|V|35}
+\monster[Mermen]{merman}{Merman}{||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Neutral|0|1--20|A|10}
+\monster[Mermen]{merman_1}{Merman}{||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Neutral|0|1--20|A|10}
+\monster[Mermen]{merman_2}{Merman}{||6|2|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 2|8|Neutral|0|1--20|A|20}
+\monster[Mermen]{merman_3}{Merman}{||6|3|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 3|8|Neutral|0|1--20|A|35}
+\monster[Mermen]{merman_4}{Merman}{||6|4|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 4|8|Neutral|0|1--20|A|75}
+\monster{minotaur}{Minotaur}{||6|6|120'|40'||||2/1|1 gore\?1 bite or weapon|1d6\x 2/1d6+2|1d6\?1d6 or by weapon\+2|Fighter: 6|12|Chaotic|1--6|1--8|C|275}
+\monster{mule}{Mule}{||7|2|120'|40'||||1/1|1 kick or 1 bite|1d4/1d3|1d4 or 1d3|Normal Man|8|Neutral|1--8|2--12|Nil|20}
+\monster{mummy}{Mummy}{|*|3|5+1*|60'|20'||||1|1 touch|1d12+disease|1d12\+disease|Fighter: 5|12|Chaotic|1--4|1--12|D|400}
+\monster{neanderthal}{Neanderthal}{||8|2|120'|40'||||1|1 weapon|2d4|2d4 or by weapon\+1|Fighter: 2|7|Lawful|1--10|10--40|C|20}
+\monster{nixie}{Nixie}{||7|1|120'|40'||||1|1|1d4|1d4|Elf: 1|6|Neutral|0|2--40|B|10}
+\monster{ochre_jelly}{Ochre Jelly}{|*|8|5*|30'|10'||||1|1|2d6|2d6|Fighter: 3|12|Neutral|1|0|Nil|35}
+\monster[Giant Octopodes]{octopus}{Giant Octopus}{Octopus||7|8|90'|30'||||9|8 tentacles\?1 bite|1d3\x 8/1d6|1d3\x 8\?1d6|Fighter: 4|7|Neutral|0|1--2|Nil|650}
+\monster{ogre}{Ogre}{||5|4+1|90'|30'||||1|1 club|1d10|1d10|Fighter: 4|10|Chaotic|1--6|2--12|C\+1,000gp|125}
+\monster{orc}{Orc}{||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8 (6)|Chaotic|2--8|10--60|D|10}
+\monster{owl_bear}{Owl Bear}{||5|5|120'|40'||||3|2 claws\?1 bite|1d8\x 3|1d8\?1d8\?1d8|Fighter: 3|9|Neutral|1--4|1--4|C|175}
+\monster[Pegasi]{pegasus}{Pegasus}{||6|2+2|240'|80'|Fly|480'|160'|2|2 hooves|1d6\x 2|1d6\?1d6|Fighter: 2|8|Lawful|0|1--12|Nil|25}
+\monster{pixie}{Pixie}{||3|1*|90'|30'|Fly|180'|60'|1|1 dagger|1d4|1d4|Elf: 1|7|Neutral|2--8|10--40|R, S|13}
+\monster{pteranodon}{Pteranodon}{Pterodactyl||6|5|Fly 240'|120'||||1|1|1d12|1d12|Fighter: 3|8|Neutral|0|1--4|V|175}
+\monster{pterodactyl}{Pterodactyl}{Pterodactyl||7|1|Fly 180'|60'||||1|1|1d3|1d3|Fighter: 1|7|Neutral|0|2--8|Nil|10}
+\monster{purple_worm}{Purple Worm}{||6|15*|60'|20'||||2|1 bite\?1 sting|2d8/1d8+poison|2d8\?1d8\+poison|Fighter: 8|10|Neutral|1--2|1--4|D|2300}
+\monster{giant_rat}{Giant Rat}{Rat||7|\half|120'|40'|Swim|60'|20'|1|1 bite|1d3+disease|1d3\+disease|Fighter: 1|8|Neutral|3--18|3--30|C|5}
+\monster{rat}{Rat}{Rat||9|1 hp|60'|20'|Swim|30'|10'|1/pack|1 bite per pack|1d6+disease|1d6\+disease|Normal Man|5|Neutral|5--50|2--20|L|5}
+\monster[Rhagodessae]{rhagodessa}{Rhagodessa}{||5|4+2|150'|50'||||2|1 leg\?1 bite|0/2d8|0\?2d8|Fighter: 2|9|Neutral|1--4|1--6|U|125}
+\monster{rhinoceros}{Rhinoceros}{Rhinoceros||5|6|120'|40'||||1|butt or trample|2d4/2d8|2d4 or 2d8|Fighter: 3|6|Neutral|0|1--12|Nil|275}
+\monster{wooly_rhinoceros}{Woolly Rhinoceros}{Rhinoceros||4|8|120'|40'||||1|butt or trample|2d6/2d12|2d6 or 2d12|Fighter: 4|6|Neutral|0|1--8|Nil|650}
+\monster{robber_fly}{Robber Fly}{||6|2|90'|30'|Fly|180'|60'|1|1 bite|1d8|1d8|Fighter: 1|8|Neutral|1--6|2--12|U|20}
+\monster{rock_baboon}{Rock Baboon}{||6|2|120'|40'||||2|1 club\?1 bite|1d6/1d3|1d6\?1d3|Fighter: 2|8|Neutral|2--12|5--30|U|20}
+\monster{small_roc}{Small Roc}{Roc||4|6|60'|20'|Fly|480'|160'|3|2 claws\?1 bite|1d4+1\x 2/2d6|1d4+1\?1d4+1\?2d6|Fighter: 6|8|Lawful|0|1--12|I|275}
+\monster{large_roc}{Large Roc}{Roc||2|12|60'|20'|Fly|480'|160'|3|2 claws\?1 bite|1d8\x 2/2d10|1d8\?1d8\?2d10|Fighter: 12|9|Lawful|0|1--8|I|1100}
+\monster{giant_roc}{Giant Roc}{Roc||0|36|60'|20'|Fly|480'|160'|3|2 claws\?1 bite|3d6\x 2/8d6|3d6\?3d6\?8d6|Fighter: 15|10|Lawful|0|1|I|6250}
+\monster{rust_monster}{Rust Monster}{|*|2|5|120'|40'||||1|1|Special|Special|Fighter: 3|7|Neutral|1--4|1--4|Nil|175}
+\monster{flame_salamander}{Flame Salamander}{Salamander|*|2|8*|120'|40'||||3|2 claws\?1 bite|1d4\x 2/1d8|1d4\?1d4\?1d8|Fighter: 8|8|Neutral|2--5|2--8|F|1200}
+\monster{frost_salamander}{Frost Salamander}{Salamander|*|3|12*|120'|40'||||5|4 claws\?1 bite|1d6\x 4/2d6|1d6\x 4\?2d6|Fighter: 12|9|Chaotic|1--3|1--3|E|1900}
+\monster{scorpion}{Giant Scorpion}{Scorpion||2|4*|150'|50'||||3|2 claws\?1 sting|1d10\x 2/1d4+poison|1d10\?1d10\?1d4\+poison|Fighter: 2|11|Chaotic|1--6|1--6|V|125}
+\monster{sea_dragon}{Sea Dragon}{||1|8**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 8|9|Neutral|0|1--4|H|1750}
+\monster{sea_dragon_5}{Sea Dragon}{||1|5**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 5|9|Neutral|0|1--4|H|425}
+\monster{sea_dragon_6}{Sea Dragon}{||1|6**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 6|9|Neutral|0|1--4|H|775}
+\monster{sea_dragon_7}{Sea Dragon}{||1|7**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 7|9|Neutral|0|1--4|H|1250}
+\monster{sea_dragon_8}{Sea Dragon}{||1|8**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 8|9|Neutral|0|1--4|H|1750}
+\monster{sea_dragon_9}{Sea Dragon}{||1|9**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 9|9|Neutral|0|1--4|H|2300}
+\monster{sea_dragon_10}{Sea Dragon}{||1|10**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 10|9|Neutral|0|1--4|H|2300}
+\monster{sea_dragon_11}{Sea Dragon}{||1|11**|Swim 180'|60'|Fly|180'|60'|1/1|1 bite or 1 spit|3d8/poison|3d8 or poison|Fighter: 11|9|Neutral|0|1--4|H|2700}
+\monster{sea_serpent}{Lesser Sea Serpent}{Sea Serpent||5|6|150'|50'||||1/1|1 bite or squeeze|2d6|2d6|Fighter: 3|8|Neutral|0|2--12|Nil|275}
+\monster{shadow}{Shadow}{|*|7|2+2*|90'|30'||||1|1|1d4+special|1d4\+special|Fighter: 2|12|Chaotic|1--8|1--12|F|35}
+\monster{bull_shark}{Bull Shark}{Shark||4|2|180'|60'||||1|1 bite|2d4|2d4|Fighter: 1|7|Neutral|0|3--18|Nil|20}
+\monster{great_white_shark}{Great White Shark}{Shark||4|8|180'|60'||||1|1 bite|2d10|2d10|Fighter: 4|7|Neutral|0|1--4|Nil|650}
+\monster{mako_shark}{Mako Shark}{Shark||4|4|180'|60'||||1|1 bite|2d6|2d6|Fighter: 2|7|Neutral|0|2--12|Nil|75}
+\monster{shrew}{Giant Shrew}{Shrew||4|1|180'|60'||||2|2 bites|1d6\x 2|1d6\?1d6|Fighter: 1|10|Neutral|1--4|1--8|Nil|10}
+\monster{shrieker}{Shrieker}{||7|3|9'|3'||||shriek|Shriek|Nil|Nil|Fighter: 1|12|Neutral|1--8|0|Nil|35}
+\monster{skeleton}{Skeleton}{||7|1|60'|20'||||1|1|1d6|1d6 or by weapon|Fighter: 1|12|Chaotic|3--12|3--30|Nil|10}
+\monster{rattlesnake}{Giant Rattlesnake}{Snake||5|4*|120'|40'||||2|2 bites|1d4\x 2+poison|1d4\?1d4\+poison|Fighter: 2|8|Neutral|1--4|1--4|U|125}
+\monster{pit_viper}{Pit Viper}{Snake||6|2*|90'|30'||||1|1 bite|1d4+poison|1d4\+poison|Fighter: 1|7|Neutral|1--8|1--8|Nil|25}
+\monster{rock_python}{Rock Python}{Snake||6|5*|90'|30'||||2|1 bite\?1 squeeze|1d4/2d4|1d4\?2d4|Fighter: 3|8|Neutral|1--3|1--3|U|35}
+\monster{sea_snake}{Sea Snake}{Snake||6|3*|90'|30'||||1|1 bite|1+poison|1\+poison|Fighter: 2|7|Neutral|1--8|1--8|Nil|50}
+\monster{spitting_cobra}{Spitting Cobra}{Snake||7|1*|90'|30'||||1/1|1 bite or spit|1d3+poison/special|1d3\+poison\?blindness|Fighter: 1|7|Neutral|1--6|1--6|Nil|13}
+\monster{spectre}{Spectre}{|*|2|6**|150'|50'|Fly|300'|100'|1|1 touch|1d8+energy drain|1d8\+drain 2 levels|Fighter: 6|11|Chaotic|1--4|1--8|E|725}
+\monster{black_widow}{Giant Black Widow Spider}{Spider||6|3*|60'|20'|Web|120'|40'|1|1 bite|2d6+poison|2d6\+poison|Fighter: 2|8|Neutral|1--3|1--3|U|50}
+\monster{crab_spider}{Giant Crab Spider}{Spider||7|2*|120'|40'||||1|1 bite|1d8+poison|1d8\+poison|Fighter: 1|7|Neutral|1--4|1--4|U|25}
+\monster{tarantella}{Giant Tarantella}{Spider||5|4*|120'|40'||||1|1 bite|1d8+poison|1d8\+poison|Fighter: 2|8|Neutral|1--3|1--3|U|125}
+\monster{sprite}{Sprite}{||5|\half*|60'|20'|Fly|180'|60'|spell|1 spell|Special|Special|Elf: 1|7|Neutral|3--18|5--40|S|6}
+\monster{squid}{Giant Squid}{Squid||7|6|120'|40'||||9|8 tentacles\?1 beak|1d4\x 8/1d10|1d4\x 8\?1d10|Fighter: 3|7 (9)|Neutral|0|1--4|V|275}
+\monster{stirge}{Stirge}{||7|1*|30'|10'|Fly|180'|60'|1|1|1d3+special|1d3\+blood drain|Fighter: 2|9|Neutral|1--10|3--36|L|13}
+\monster{swamp_termite}{Swamp Termite}{Termite||4|1+1|90'|30'||||1/1/1|1 bite or spray or ink|1d3/special|1d3 or stun or blindness|Fighter: 1|10|Neutral|0|1--4|Nil|15}
+\monster{freshwater_termite}{Freshwater Termite}{Termite||6|2+1|120'|40'||||1/1/1|1 bite or spray or ink|1d4/special|1d4 or stun or blindness|Fighter: 2|8|Neutral|0|1--3|Nil|25}
+\monster{sea_termite}{Sea Termite}{Termite||5|4|180'|60'||||1/1/1|1 bite or spray or ink|1d6/special|1d6 or stun or blindness|Fighter: 3|11|Neutral|0|2--7|Nil|75}
+\monster{thoul}{Thoul}{||6|3**|120'|40'||||2/1|2 claws or weapon|1d3\x 2/1d8|1d3\?1d3 or by weapon|Fighter: 3|10|Chaotic|1--6|1--10|C|65}
+\monster{titanothere}{Titanothere}{||5|12|120'|40'||||1/1|butt or trample|2d6/3d8|2d6\?3d8|Fighter: 6|7|Neutral|0|1--6|Nil|1100}
+\monster{toad}{Giant Toad}{Toad||7|2+2|90'|30'||||1|1 bite|1d4+1|1d4+1|Fighter: 1|6|Neutral|1--4|1--4|Nil|25}
+\monster{treant}{Treant}{||2|8|60'|20'||||2|2 blows|2d6\x 2|2d6\?2d6|Fighter: 8|9|Lawful|0|1--8|C|650}
+\monster{troglodyte}{Troglodyte}{||5|2*|120'|40'||||3|2 claws\?1 bite|1d4\x 3|1d4\?1d4\?1d4|Fighter: 2|9|Chaotic|1--8|5--40|A|25}
+\monster{troll}{Troll}{||4|6+3|120'|40'||||3|2 claws\?1 bite|1d6\x 2/1d10|1d6\?1d6\?1d10|Fighter: 6|10 (8)|Chaotic|1--8|1--8|D|350}
+\monster{unicorn}{Unicorn}{||2|4*|240'|80'||||3|2 hooves\?1 horn|1d8\x 3|1d8\?1d8\?1d8|Fighter: 8|7|Lawful|1--6|1--8|Nil|125}
+\monster{vampire}{Vampire}{|*|2|7**|120'|40'|Fly|180'|60'|1|1 touch|1d10+energy drain|1d10\+drain 2 levels|Fighter: 7|11|Chaotic|1--4|1--6|F|1250}
+\monster{vampire_7}{Vampire}{|*|2|7**|120'|40'|Fly|180'|60'|1|1 touch|1d10+energy drain|1d10\+drain 2 levels|Fighter: 7|11|Chaotic|1--4|1--6|F|1250}
+\monster{vampire_8}{Vampire}{|*|2|8**|120'|40'|Fly|180'|60'|1|1 touch|1d10+energy drain|1d10\+drain 2 levels|Fighter: 8|11|Chaotic|1--4|1--6|F|1750}
+\monster{vampire_9}{Vampire}{|*|2|9**|120'|40'|Fly|180'|60'|1|1 touch|1d10+energy drain|1d10\+drain 2 levels|Fighter: 9|11|Chaotic|1--4|1--6|F|2300}
+\monster{weasel}{Giant Weasel}{Weasel||7|4+4|150'|50'||||1|1 bite|2d4+special|2d4\+special|Fighter: 3|8|Neutral|1--4|1--6|V|125}
+\monster{killer_whale}{Killer Whale}{Whale||6|6|240'|80'||||1|1 bite|1d20|1d20|Fighter: 3|10|Neutral|0|1--6|V|275}
+\monster{narwhal}{Narwhal}{Whale||7|12|180'|60'||||2|1 horn\?1 bite|2d6/1d8|2d6\?1d8|Fighter: 12|8|Lawful|0|1--4|Special|1100}
+\monster{sperm_whale}{Sperm Whale}{Whale||6|36|180'|60'||||1|1 bite|3d20|3d20|Fighter: 15|7|Neutral|0|1--3|V|6250}
+\monster{wight}{Wight}{|*|5|3*|90'|30'||||1|1|energy drain|Drain 1 level|Fighter: 3|12|Chaotic|1--6|1--8|B|50}
+\monster[Dire Wolves]{dire_wolf}{Dire Wolf}{Wolf||6|4+1|150'|50'||||1|1 bite|2d4|2d4|Fighter: 2|8|Neutral|1--4|2--8|Nil|125}
+\monster[Wolves]{wolf}{Wolf}{Wolf||7|2+2|180'|60'||||1|1 bite|1d6|1d6|Fighter: 1|8 (6)|Neutral|2--12|3--18|Nil|25}
+\monster{wraith}{Wraith}{|*|3|4**|120'|40'|Fly|240'|80'|1|1 touch|1d6+energy drain|1d6\+drain 1 level|Fighter: 4|12|Chaotic|1--4|1--6|E|175}
+\monster{wyvern}{Wyvern}{||3|7*|90'|30'|Fly|240'|80'|2|1 bite\?1 sting|2d8/1d6+poison|2d8\?1d6\+poison|Fighter: 4|9|Chaotic|1--2|1--6|E|850}
+\monster[Patches of Yellow Mold]{yellow_mold}{Yellow Mold}{|*|---|2|Nil|Nil||||1|Spores|1d6+special|1d6\+special|Fighter: 2|---|Neutral|1--8|1--4|Nil|20}
+\monster[Patches of Yellow Mould]{yellow_mould}{Yellow Mould}{|*|---|2|Nil|Nil||||1|Spores|1d6+special|1d6\+special|Fighter: 2|---|Neutral|1--8|1--4|Nil|20}
+\monster{zombie}{Zombie}{||8|2|120'|40'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 1|12|Chaotic|2--8|4--24|Nil|20}
+\monster[Archer Bushes]{archer_bush_orange}{Archer Bush}{||9|1|Nil|Nil||||1|1 thorn spray|1d4|1d4|Fighter: 1|12|Neutral|0|1--100|Nil|10}
+\monster[Archer Bushes]{archer_bush}{Archer Bush}{||7|2|3'|1'||||1|1 thorn spray|1d4|1d4|Fighter: 1|12|Neutral|0|1--20|V|20}
+\monster{baric}{Baric}{||7|5|120'|40'||||3|2 claws\?1 bite|1d4\x 2/1d10|1d4\?1d4\?1d10|Fighter: 5|8|Neutral|1--8|1--8|Nil|175}
+\monster{bubble}{Bubble}{||9|\half*|90'|30'||||1|1|1d4+special|1d4\+paralysis|Fighter: 1|9|Neutral|0|3--18|J|6}
+\monster{decapus_orange}{Decapus}{||5|3*|12'|4'||||9|9 tentacles|1d6\x 9|1d6 each|Fighter: 3|9|Chaotic|1|1|B|50}
+\monster{decapus}{Decapus}{||5|4|3'|1'|Brachiation|90'|30'|9|9 tentacles|1d6\x 9|1d6 each|Fighter: 2|9|Chaotic|1|1|C|75}
+\monster{diger}{Diger}{||9|2*|9'|3'|Fly/Swim|90'/120'|30'/40'|1|1 touch|paralysis|Paralysis|Magic-User: 2|8|Neutral|0|1|O|25}
+\monster{ghost}{Ghost}{|*|1|5*|50'|15'|Fly|150'|50'|1|1 touch|1d6+aging|1d6\+aging|Fighter: 5|12|Chaotic|1--4|1--4|C|300}
+\monster{marble_snake}{Giant Marble Snake}{Snake||8|3*|150'|50'||||1+charm|1+charm|1d6|1d6|Fighter: 3|8|Neutral|1--4|1--4|C|50}
+\monster{jupiter_blood_sucker}{Jupiter Blood Sucker}{||5|3|9'|3'||||1|1|1d6+special|1d6\+blood drain|Fighter: 3|12|Neutral|0|1--10|Nil|35}
+\monster{vampire_rose}{Vampire Rose}{||7|4|30'|10'||||1|1 thorn|1d8+special|1d8\+blood drain|Fighter: 2|12|Chaotic|0|1--8|Nil|75}
+\monster{marmoset}{Giant Marmoset}{Monkey||5|3|180'|60'||||4|4|1d6\x 2/1d8/1d4|1d6\?1d6\?1d8\?1d4|Fighter: 3|8|Neutral|2--8|2--8|J|35}
+\monster{protector}{Protector}{||2|7|210'|70'||||1|1|1d6|1d6|Magic-User: 7|10|Lawful|0|1--10|B|450}
+\monster[Patches of Purple Moss]{purple_moss}{Purple Moss}{||9|1*|9'|3'||||1|1|special|Special|Fighter: 1|12|Neutral|0|1--8|Nil|13}
+\monster{ubue}{Ubue}{||7|3|60'|20'||||3|3|1d6\x 2/1d4|1d6\?1d6\?1d4|Fighter: 3|3|Chaotic|3--30|3--30|Q, U, V|35}
+\monster{banshee}{Banshee}{|*|3|5*|150'|50'||||wail|wail|1d4/rd|1d4\?round|Fighter: 5|12|Neutral|1|1|C|300}
+\monster{cynidicean}{Cynidicean}{||9|1|120'|40'||||1|1|1d6|1d6|Fighter: 1|7 (special)|Chaotic|1--6|1--6|A|10}
+\monster[Werefoxes]{werefox}{Werefox}{Lycanthrope||6\,(9)|3+2*|180'|60'||||1+charm|1\+charm|1d6|1d6|Fighter: 3|8|Neutral|1--4|1--6|C|75}
+\monster{polymar}{Polymar}{||9|10*|60'|20'||||3|3|1d6\x 3|1d6\?1d6\?1d6|Fighter: 5|10|Chaotic|1--2|1--3|B|1600}
+\monster{zargon}{Zargon}{||0|12*|90'|30'||||7|7|1d8\x 6/3d8|1d8\x 6\?3d8|Fighter: 12|12|Chaotic|0|1|Special|1900}
+\monster{allosaurus}{Allosaurus}{Dinosaur||5|13|150'|50'||||1|1 bite|4d6|4d6|Fighter: 7|9|Neutral|0|1--4|V|1350}
+\monster{ankylosaurus}{Ankylosaurus}{Dinosaur||0|7|60'|20'||||1|1 tail|2d6|2d6|Fighter: 4|6|Neutral|0|1--8|Nil|450}
+\monster[Araneae]{aranea}{Aranea}{||7|3**|60'|20'|Web|120'|40'|1|1 bite|1d6+poison|1d6\+poison|Magic-User: 3|7|Chaotic|1--3|1--6|D|65}
+\monster{brontosaurus}{Brontosaurus}{Dinosaur||5|26|60'|20'||||2|1 bite\?1tail|2d6/3d6|2d6\?3d6|Fighter: 13|8|Neutral|0|1--3|Nil|3750}
+\monster{dimetrodon}{Dimetrodon}{Dinosaur||5|7|120'|40'||||1|1 bite|2d8|2d8|Fighter: 4|8|Neutral|0|1--6|V|450}
+\monster{giant_elk}{Giant Elk}{Elk||6|8|120'|40'||||1|1 butt|1d12|1d12|Fighter: 4|7|Neutral|0|1--6|Nil|650}
+\monster[Grangeri]{grangeri}{Grangeri}{||5|13|120'|40'||||1/1|1 bite or trample|2d6/3d6|2d6 or 3d6|Fighter: 7|7|Neutral|0|1--6|Nil|1350}
+\monster[Kopru]{kopru}{Kopru}{||3|8+4|30'|10'|Swim|150'|50'|2+charm|1 bite\?1 tail or charm|1d4/3d6|1d4\?3d6|Fighter: 9|9|Chaotic|1--3|1--3|I, N|650}
+\monster[Megatheria]{megatherium}{Megatherium}{||6|11|90'|30'||||2|2 claws|2d6\x 2|2d6\?2d6|Fighter: 6|7|Neutral|0|1--6|Nil|1100}
+\monster{native}{Native}{Men||9|1\minus 1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|7|Any|0|3--30, village 30--300|A|5}
+\monster{oyster}{Giant Oyster}{Oyster||5\,(\minus 2)|10|Nil|Nil||||1|1 shell|4d6|4d6|Fighter: 5|---|Neutral|0|1--4|E|900}
+\monster{phanaton}{Phanaton}{||7|1\minus 1|90'|30'|Glide|150'|50'|1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|7|Lawful|0|3--30, village 30--300|Nil|5}
+\monster{phororhacos}{Phororhacos}{||6|3|150'|50'||||1|1 bite|1d8|1d8|Fighter: 2|8|Neutral|0|1--8|U|35}
+\monster{plesiosaurus}{Plesiosaurus}{Dinosaur||6|16|Swim 150'|50'||||1|1 bite|4d6|4d6|Fighter: 8|9|Neutral|0|1--3|Nil|1350}
+\monster[Rakasta]{rakasta}{Rakasta}{||6|2+1|90'|30'||||3|2 claws\?1 bite|1d4\x 3|1d4\?1d4\?1d4|Fighter: 2|9|Neutral|0|3--30|M (special)|25}
+\monster{trachodon}{Trachodon}{Dinosaur||5|14|120'|40'||||1|1 tail|2d6|2d6|Fighter: 7|6|Neutral|0|1--6|Nil|1350}
+\monster{amber_lotus_flower}{Amber Lotus Flower}{||9|\half|Nil|Nil||||1|Pollen cloud|sleep|Sleep|Normal Man|12|Neutral|0|3--18|Nil|5}
+\monster[Giant Amoebae]{amoeba}{Giant Amoeba}{Amoeba||9|10|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|900}
+\monster[Giant Amoebae]{amoeba_10}{Giant Amoeba}{Amoeba||9|10|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|900}
+\monster[Giant Amoebae]{amoeba_11}{Giant Amoeba}{Amoeba||9|11|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|1100}
+\monster[Giant Amoebae]{amoeba_12}{Giant Amoeba}{Amoeba||9|12|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|1100}
+\monster[Giant Amoebae]{amoeba_13}{Giant Amoeba}{Amoeba||9|13|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|1350}
+\monster[Giant Amoebae]{amoeba_14}{Giant Amoeba}{Amoeba||9|14|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|1350}
+\monster[Giant Amoebae]{amoeba_15}{Giant Amoeba}{Amoeba||9|15|30'|10'||||1|envelop|2d6\?rd|acid 2d6\?round|Fighter: 7|10|Neutral|1|1|Nil|1350}
+\monster{brain_collector}{Brain Collector}{||2|10*|180'|60'||||1+spells|1 bite\+spells|1d10|1d10|Fighter: 10|10|Chaotic|1|1|C|1600}
+\monster{death_demon}{Death Demon}{Demon||4|7**|90'|30'|Fly|180'|60'|3|2 claws\?1 bite|1d4\x 2/2d4+special|1d4\?1d4\?2d8\+special|Fighter: 7|10|Chaotic|1--4|1--4|E|1250}
+\monster{mud_golem}{Mud Golem}{Golem||9|8*|90'|30'||||1|1 hug|2d12+special|2d12\+smothering|Fighter: 8|12|Neutral|1|1|Nil|1200}
+\monster[Patches of Grab Grass]{grab_grass}{Grab Grass}{||9|1|Nil|Nil||||1|Grab|special|Special|Normal Man|12|Neutral|0|special|Nil|10}
+\monster{gremlin}{Gremlin}{||7|1**|120'|40'||||special|Special|special|Special|Elf: 1|12|Chaotic|1--6|1--6|Nil|16}
+\monster{killer_tree}{Killer Tree}{Tree||5|6|Nil|Nil||||5|4 limbs\?1 mouth|0\x 4/3d6|Grab\x 4\?3d6|Fighter: 3|12|Neutral|0|2--12|Nil|275}
+\monster{lupin}{Lupin}{||6|2|120'|40'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 2|8|Lawful|2--12|'5--40|C|20}
+\monster[Hypnos Magen]{hypnos_magen}{Hypnos Magen}{Magen||7|2*|120'|40'||||1|1|charm|Charm|Magic-User: 2|12|Neutral|1|0|U|25}
+\monster[Demos Magen]{demos_magen}{Demos Magen}{Magen||7|3+2|120'|40'||||1|1 weapon|1d8|1d8 or by weapon|Fighter: 4|12|Neutral|2d6|0|C|50}
+\monster[Caldron Magen]{caldron_magen}{Caldron Magen}{Magen||5|4*|120'|40'||||1|1|1d10/rd|Acid 1d10\?round|Fighter: 4|12|Neutral|1d4|0|V|125}
+\monster[Galvan Magen]{galvan_magen}{Galvan Magen}{Magen||3|5*|120'|40'||||1/special|1 weapon or lightning bolt|1d8/3d6|by weapon or 3d6 (lightning)|Fighter: 5|12|Neutral|1d3|0|C|300}
+\monster{pagan}{Pagan}{||6|1|120'|40'||||1|1 weapon|1d6|1d6 or by weapon|Fighter: 1|8|Neutral|0|'3--30|A|10}
+\monster{phantom}{Phantom}{|*|9|6*|120'|40'|Fly|240'|80'|1|1|1d4+special|1d4\+special|Fighter: 6|6|Chaotic|1--3|1--4|C|500}
+\monster{slime_worm}{Slime Worm}{Worm||5|10|60'|20'||||1|1 bite|2d6|2d6|Fighter: 5|9|Neutral|1|1|D|900}
+\monster{sun_brother}{Sun Brother}{||0|10*|120'|40'||||1|1 weapon|1d8+3|1d8\+3 or weapon\+3|Fighter: 10|9 (12)|Lawful|1|1|Nil|1600}
+\monster{sun_brother_10}{Sun Brother}{||0|10*|120'|40'||||1|1 weapon|1d8+3|1d8\+3 or weapon\+3|Fighter: 10|9 (12)|Lawful|1|1|Nil|1600}
+\monster{sun_brother_11}{Sun Brother}{||0|11*|120'|40'||||1|1 weapon|1d8+3|1d8\+3 or weapon\+3|Fighter: 11|9 (12)|Lawful|1|1|Nil|1900}
+\monster{sun_brother_12}{Sun Brother}{||0|12*|120'|40'||||1|1 weapon|1d8+3|1d8\+3 or weapon\+3|Fighter: 12|9 (12)|Lawful|1|1|Nil|1900}
+\monster{sun_brother_13}{Sun Brother}{||0|13*|120'|40'||||1|1 weapon|1d8+3|1d8\+3 or weapon\+3|Fighter: 13|9 (12)|Lawful|1|1|Nil|2300}
+\monster{sun_brother_14}{Sun Brother}{||0|14*|120'|40'||||1|1 weapon|1d8+3|1d8\+3 or weapon\+3|Fighter: 14|9 (12)|Lawful|1|1|Nil|2300}
diff --git a/macros/latex/contrib/rpg-module/basic-stats.sty b/macros/latex/contrib/rpg-module/basic-stats.sty
new file mode 100644
index 0000000000..a2f2fb134d
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/basic-stats.sty
@@ -0,0 +1,399 @@
+%% basic-stats.sty
+%
+% Basic stat blocks for the Role-Playing Game Module class
+%
+% Copyright 2016 Michael C. Davis
+%
+% LICENSE FOR THE WORK
+%
+% This work consists of the following files:
+% rpg-module.cls
+% basic-stats.sty
+% basic-stats.def
+% doc/rpg-module.tex
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version. The latest version of this license can be found at:
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `author-maintained'.
+%
+% The Author and Maintainer of this work is Michael C. Davis
+%
+%
+% LICENSE FOR COMPILED WORKS
+%
+% You may distribute compiled works generated using the work as specified in
+% Clause 3 of the LaTeX Project Public License. If you incorporate Open Gaming
+% Content into the compiled work, you must also comply with the terms of that
+% license.
+%
+%
+% USAGE
+%
+% See the file rpg-module.pdf (source file doc/rpg-module.tex) for documentation.
+% There are a number of worked examples in the examples/ directory.
+%
+% Technical support is provided on Dragonsfoot Forums:
+%
+% http://www.dragonsfoot.org/forums/viewtopic.php?f=87&t=73823
+
+\ProvidesPackage{basic-stats}[2016/04/25 Basic Stat Blocks for the Role-Playing Game Module class]
+
+\RequirePackage{tabularx}
+
+
+
+% Redefine which environment will be displayed
+\includecomment{ifbasicstats}
+
+% Armour class macro
+%
+% The default for Basic stats is to use the same descending AC that is used in
+% the Basic rulebook. However, three alternative styles are defined: ascending
+% AC style, B1 style and Swords & Wizardry style. Thanks to Zenopus archives
+% for pointing out that the B1 style is an early form of ascending AC, see:
+%
+% http://zenopusarchives.blogspot.com/2014/02/ascending-ac-in-holmes-basic.html
+
+\newcounter{acasc@module} % Counter for AC calculations
+
+\newcommand\ac@module[1]{%
+ \@ifundefined{acstyle@module}{\gdef\acstyle@module{desc}}{}% % Default AC style is descending
+ \ifnum\pdfstrcmp{\acstyle@module}{desc}=\z@ % Display descending AC
+ #1\ignorespaces
+ \else\ifnum\pdfstrcmp{#1}{---}=\z@
+ #1\ignorespaces
+ \else%
+ \setcounter{acasc@module}{19}%
+ \IfSubStr{#1}{\,}{\StrBefore{#1}{\,}[\tmpac]}{\def\tmpac{#1}}%
+ \IfBeginWith{\tmpac}{\minus}{%
+ \StrBehind{\tmpac}{\minus}[\tmpac]%
+ \addtocounter{acasc@module}{\tmpac}%
+ }{%
+ \addtocounter{acasc@module}{-\tmpac}%
+ }%
+ \ifnum\pdfstrcmp{\acstyle@module}{asc}=\z@ % Display ascending AC
+ \theacasc@module\ignorespaces
+ \else\ifnum\pdfstrcmp{\acstyle@module}{b1}=\z@ % Display AC using B1 notation
+ #1/\theacasc@module\ignorespaces
+ \else\ifnum\pdfstrcmp{\acstyle@module}{sw}=\z@ % Display AC using Swords & Wizardry notation
+ #1\,(\theacasc@module)\ignorespaces
+ \else
+ Unknown AC style \acstyle@module
+ \fi\fi\fi
+ \fi\fi
+}
+
+% Hit Dice : convert short form to long form for stat blocks
+
+\newcommand\hd@module[1]{\IfBeginWith{#1}{\half}{#1 (1-4 hp)}{#1}}
+
+% Saving throws : convert long form to short form for stat blocks
+
+\newcommand\sv@module[1]{\StrLeft{#1}{1}[\first]\StrBehind{#1}{ }[\second]\IfInteger{\second}{}{\StrLeft{\second}{1}[\second]}\first\second}
+
+% Morale macro : convert long form to short form for stat blocks
+
+\newcommand\ml@module[1]{\IfSubStr{#1}{ }{\StrBefore{#1}{ }}{#1}}
+
+% Alignment macro : convert long form to short form for stat blocks
+
+\newcommand\al@module[1]{%
+ \ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/AL}}{Any}=\z@
+ N % For monsters with variable alignment, assume Neutral unless we specify with changealignment
+ \else
+ \StrLeft{\pgfkeysvalueof{/#1/AL}}{1}
+ \fi
+}
+
+% Change alignment macro, for monsters with Alignment ``Any'' or ``Variable''
+
+\newcommand{\changealignment}[2]{\pgfkeys{/#1/AL = {#2}}}
+
+
+
+% Basic stat block key-value pairs
+
+\newcommand{\setstatbasic}[2]{%
+ \ifcase\thecurrentstat
+ \pgfkeys{/#1/Type/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/SilverMagic/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/AC/.initial = \ac@module{#2}}
+ \or
+ \pgfkeys{/#1/HD/.initial = {#2}}
+ \pgfkeys{/#1/HDlong/.initial = \hd@module{#2}}
+ \or
+ \pgfkeys{/#1/MVturn/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/MVrd/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/MVspec/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/MVspec_turn/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/MVspec_rd/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/Attshort/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/Attlong/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/Dmg/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/Dmglong/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/SV/.initial = \sv@module{#2}}
+ \pgfkeys{/#1/SVlong/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/ML/.initial = \ml@module{#2}}
+ \pgfkeys{/#1/MLlong/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/AL/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/NoAppear/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/NoInLair/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/TT/.initial = {#2}}
+ \or
+ \pgfkeys{/#1/XP/.initial = {#2}}
+ \fi
+}
+
+% Define monsters using \setstatbasic
+
+\def\scan@stats#1|{%
+ \ifnum\pdfstrcmp{#1}{\relax}=\z@
+ \let\next\relax
+ \else
+ \setstatbasic{\currentmonster}{#1}\let\next\scan@stats
+ \stepcounter{currentstat}
+ \fi\next
+}
+
+
+
+% Display monster stats inline
+%
+% Usage: \stats[monster name]{monster key}{no. appearing}{hit points}
+
+\newcommand{\stats}[4][default]{%
+ \ifnum\pdfstrcmp{#1}{default}=\z@
+ \ifnum\pdfstrcmp{#3}{1}=\z@
+ \pgfkeys{/#2/SingleName}: % Use the generic name defined for this monster (single instance)
+ \else
+ \pgfkeys{/#2/PluralName} (#3): % Use the generic name defined for this monster (plural + number appearing)
+ \fi
+ \else
+ #1 % Override the generic name with the optional argument
+ \fi
+ AC~\pgfkeys{/#2/AC},
+ HD~\pgfkeys{/#2/HD},
+ hp~#4,
+ MV~\pgfkeys{/#2/MVturn}\thinspacebrk(\pgfkeys{/#2/MVrd}),
+\ifnum\pdfstrcmp{\pgfkeysvalueof{/#2/MVspec}}{}=\z@\else
+ \pgfkeys{/#2/MVspec}~\pgfkeys{/#2/MVspec_turn}\thinspacebrk(\pgfkeys{/#2/MVspec_rd}),
+\fi
+ Att~\pgfkeys{/#2/Attlong},
+ D~\pgfkeys{/#2/Dmglong},
+ Save~\pgfkeys{/#2/SV},
+ ML~\pgfkeys{/#2/ML},
+ AL~\al@module{#2},
+ XP~\pgfkeys{/#2/XP}%
+}
+
+% Display monster stats in a stat block
+%
+% Usage: \statblock[monster name]{monster key}{no. appearing}{hit points}
+
+\newcommand{\statblock}[4][default]{%
+ \begin{statblockfreestyle}
+ \stats[#1]{#2}{#3}{#4}
+ \end{statblockfreestyle}
+}
+
+
+
+% Table display format for wandering monsters
+
+\newcounter{wandering@module}
+
+
+\newenvironment{wanderingmonsters}[1][c]{\begin{center}\begin{tabular}{clccccccccc}
+\setcounter{wandering@module}{0}%
+\tableheader[#1]{Die Roll & Wandering Monster & No. & AC & HD & MV & Attacks & Damage & Save & ML & AL}}
+{\end{tabular}\end{center}}
+
+% Usage: \wanderitem[die roll]{monster key}{no. appearing}
+%
+% Leave no. appearing blank to use the value from the monster stats
+
+\newcommand{\wanderitem}[3][default]{%
+ \ifnum\pdfstrcmp{#1}{default}=\z@
+ \stepcounter{wandering@module}\thewandering@module
+ \else
+ \IfInteger{#1}{\setcounter{wandering@module}{#1}\thewandering@module}{#1}
+ \fi &
+ \IfStrEq{#3}{}{%
+ \if\pgfkeysvalueof{/#2/NoAppear}\string 1\pgfkeys{/#2/SingleName}\else\pgfkeys{/#2/PluralName}\fi & \pgfkeys{/#2/NoAppear} &
+ }{%
+ \ifnum\pdfstrcmp{#3}{1}=\z@\pgfkeys{/#2/SingleName}\else\pgfkeys{/#2/PluralName}\fi & #3 &
+ }
+ \pgfkeys{/#2/AC} & \pgfkeys{/#2/HD} & \pgfkeys{/#2/MVrd}%
+\ifnum\pdfstrcmp{\pgfkeysvalueof{/#2/MVspec}}{}=\z@\else
+ /\pgfkeys{/#2/MVspec_rd}%
+\fi
+ & \pgfkeys{/#2/Attshort} & \pgfkeys{/#2/Dmg} & \pgfkeys{/#2/SV} & \pgfkeys{/#2/ML} & \al@module{#2}\\
+}
+
+
+
+% Table display format for monster roster
+
+\newenvironment{monsterroster}[1][c]{\begin{center}\begin{tabular}{clcccccccccc}
+\tableheader[#1]{Room & Monster & No. & AC & HD & hp & MV & Attacks & Damage & Save & ML & AL}}
+{\end{tabular}\end{center}}
+
+% Usage: \rosteritem{room key}{monster key}{no. appearing}{hit points}
+%
+% If the room key is provided as a reference, the class will create a hyperlink from the monster
+% roster to the room description
+
+\newcommand{\rosteritem}[4]{%
+ #1 &
+ \ifnum\pdfstrcmp{#3}{1}=\z@
+ \pgfkeys{/#2/SingleName} &
+ \else
+ \pgfkeys{/#2/PluralName} &
+ \fi
+ #3 & \pgfkeys{/#2/AC} & \pgfkeys{/#2/HD} & #4 & \pgfkeys{/#2/MVrd}%
+\ifnum\pdfstrcmp{\pgfkeysvalueof{/#2/MVspec}}{}=\z@\else
+ /\pgfkeys{/#2/MVspec_rd}%
+\fi
+ & \pgfkeys{/#2/Attshort} & \pgfkeys{/#2/Dmg} & \pgfkeys{/#2/SV} & \pgfkeys{/#2/ML} & \al@module{#2}\\
+}
+
+
+
+%
+% New Monster environment
+%
+
+\newcommand{\newmonsterfont}{\Large\bfseries}
+\newcommand{\newmonsterbottomskip}{\topskip}
+
+\newcommand{\longname}[1]{%
+ \ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/Type}}{}=\z@
+ \pgfkeysvalueof{/#1/SingleName}%
+ \else\ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/Type}}{\pgfkeysvalueof{/#1/SingleName}}=\z@
+ \pgfkeysvalueof{/#1/SingleName}%
+ \else
+ \pgfkeysvalueof{/#1/Type}, \texorpdfstring{\protect\StrDel{\pgfkeysvalueof{/#1/SingleName}}{ \pgfkeysvalueof{/#1/Type}}}{}%
+ \fi\fi
+}
+
+\newenvironment{newmonster}[1]{%
+\@afterindentfalse\@afterheading\vspace{\topskip}
+\begin{tabularx}{\linewidth}{@{}l>{\raggedright\arraybackslash}Xl>{\raggedright\arraybackslash}X@{}}
+\multicolumn{4}{l}{\hspace{-\tabcolsep}\newmonsterfont\longname{#1}\pgfkeys{/#1/SilverMagic}%
+\phantomsection\addcontentsline{toc}{section}{\longname{#1}}}\\[\topskip]
+\ArmourClass: & \pgfkeys{/#1/AC} & No. Appearing: & \pgfkeys{/#1/NoAppear} (\pgfkeys{/#1/NoInLair})\\
+Hit Dice: & \pgfkeys{/#1/HDlong} & Save As: & \pgfkeys{/#1/SVlong}\\
+Move: & \pgfkeys{/#1/MVturn} (\pgfkeys{/#1/MVrd}) & Morale: & \pgfkeys{/#1/MLlong}\\
+\ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/MVspec}}{}=\z@\else
+\hspace{1em}\pgfkeys{/#1/MVspec}: & \pgfkeys{/#1/MVspec_turn} (\pgfkeys{/#1/MVspec_rd})\\
+\fi
+Attacks: & \pgfkeys{/#1/Attlong} & Treasure Type: & \pgfkeys{/#1/TT}\\
+Damage: & \pgfkeys{/#1/Dmglong} & Alignment: & \pgfkeys{/#1/AL}\\
+\end{tabularx}\par\vspace{\newmonsterbottomskip}\noindent\ignorespaces}{\vspace{\newmonsterbottomskip}\par\aftergroup\@afterindentfalse\aftergroup\@afterheading}
+
+% Two-column version
+
+\newenvironment{newmonster2*}[4]{%
+\@afterindentfalse\@afterheading\vspace{\topskip}
+\begin{tabularx}{\linewidth}{@{}X>{\raggedright\arraybackslash}>{\raggedright\arraybackslash}X>{\raggedright\arraybackslash}X@{}}
+\ifnum\pdfstrcmp{#3}{}=\z@\else
+\multicolumn{3}{l}{\hspace{-\tabcolsep}\newmonsterfont#3#4%
+\phantomsection\addcontentsline{toc}{section}{#3}}\\[\newmonsterbottomskip]
+\fi
+ & \ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/Type}}{\pgfkeysvalueof{/#1/SingleName}}=\z@
+ Normal
+\fi\pgfkeys{/#1/SingleName} & \pgfkeys{/#2/SingleName}\\
+\cmidrule(l{\tabcolsep}r{\tabcolsep}){2-2}
+\cmidrule(l{\tabcolsep}r{\tabcolsep}){3-3}
+\ArmourClass: & \pgfkeys{/#1/AC} & \pgfkeys{/#2/AC}\\
+Hit Dice: & \pgfkeys{/#1/HDlong} & \pgfkeys{/#2/HDlong}\\
+Move: & \pgfkeys{/#1/MVturn} (\pgfkeys{/#1/MVrd}) & \pgfkeys{/#2/MVturn} (\pgfkeys{/#2/MVrd})\\
+\ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/MVspec}}{}=\z@\else
+\hspace{1em}\pgfkeys{/#1/MVspec}: & \pgfkeys{/#1/MVspec_turn} (\pgfkeys{/#1/MVspec_rd}) & \pgfkeys{/#2/MVspec_turn} (\pgfkeys{/#2/MVspec_rd})\\
+\fi
+Attacks: & \pgfkeys{/#1/Attlong} & \pgfkeys{/#2/Attlong}\\
+Damage: & \pgfkeys{/#1/Dmglong} & \pgfkeys{/#2/Dmglong}\\
+No. Appearing: & \pgfkeys{/#1/NoAppear} (\pgfkeys{/#1/NoInLair}) & \pgfkeys{/#2/NoAppear} (\pgfkeys{/#2/NoInLair})\\
+Save As: & \pgfkeys{/#1/SVlong} & \pgfkeys{/#2/SVlong}\\
+Morale: & \pgfkeys{/#1/MLlong} & \pgfkeys{/#2/MLlong}\\
+Treasure Type: & \pgfkeys{/#1/TT} & \pgfkeys{/#2/TT}\\
+Alignment: & \pgfkeys{/#1/AL} & \pgfkeys{/#2/AL}\\
+\end{tabularx}\par\vspace{\newmonsterbottomskip}\noindent\ignorespaces}{\vspace{\newmonsterbottomskip}\par\aftergroup\@afterindentfalse\aftergroup\@afterheading}
+
+\newenvironment{newmonster2}[2]{\begin{newmonster2*}{#1}{#2}{\pgfkeysvalueof{/#1/Type}}{\pgfkeysvalueof{/#1/SilverMagic}}}{\end{newmonster2*}}
+
+% Three-column version
+
+\newenvironment{newmonster3*}[5]{%
+\@afterindentfalse\@afterheading\vspace{\topskip}
+\begin{tabularx}{\linewidth}{@{}>{\raggedright\arraybackslash}X>{\raggedright\arraybackslash}X>{\raggedright\arraybackslash}X>{\raggedright\arraybackslash}X@{}}
+\ifnum\pdfstrcmp{#4}{}=\z@\else
+\multicolumn{4}{l}{\hspace{-\tabcolsep}\newmonsterfont#4#5%
+\phantomsection\addcontentsline{toc}{section}{#4}}\\[\newmonsterbottomskip]
+\fi
+ & \ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/Type}}{\pgfkeysvalueof{/#1/SingleName}}=\z@
+ Normal
+\fi\pgfkeys{/#1/SingleName} & \pgfkeys{/#2/SingleName} & \pgfkeys{/#3/SingleName}\\
+\cmidrule(l{\tabcolsep}r{\tabcolsep}){2-2}
+\cmidrule(l{\tabcolsep}r{\tabcolsep}){3-3}
+\cmidrule(l{\tabcolsep}r{\tabcolsep}){4-4}
+\ArmourClass: & \pgfkeys{/#1/AC} & \pgfkeys{/#2/AC} & \pgfkeys{/#3/AC}\\
+Hit Dice: & \pgfkeys{/#1/HDlong} & \pgfkeys{/#2/HDlong} & \pgfkeys{/#3/HDlong}\\
+Move: & \pgfkeys{/#1/MVturn} (\pgfkeys{/#1/MVrd})
+ & \pgfkeys{/#2/MVturn} (\pgfkeys{/#2/MVrd})
+ & \pgfkeys{/#3/MVturn} (\pgfkeys{/#3/MVrd})\\
+\ifnum\pdfstrcmp{\pgfkeysvalueof{/#1/MVspec}}{}=\z@\else
+\hspace{1em}\pgfkeys{/#1/MVspec}: & \pgfkeys{/#1/MVspec_turn} (\pgfkeys{/#1/MVspec_rd})
+ & \pgfkeys{/#2/MVspec_turn} (\pgfkeys{/#2/MVspec_rd})
+ & \pgfkeys{/#3/MVspec_turn} (\pgfkeys{/#3/MVspec_rd})\\
+\fi
+Attacks: & \pgfkeys{/#1/Attlong} & \pgfkeys{/#2/Attlong} & \pgfkeys{/#3/Attlong}\\
+Damage: & \pgfkeys{/#1/Dmglong} & \pgfkeys{/#2/Dmglong} & \pgfkeys{/#3/Dmglong}\\
+No. Appearing: & \pgfkeys{/#1/NoAppear} (\pgfkeys{/#1/NoInLair})
+ & \pgfkeys{/#2/NoAppear} (\pgfkeys{/#2/NoInLair})
+ & \pgfkeys{/#3/NoAppear} (\pgfkeys{/#3/NoInLair})\\
+Save As: & \pgfkeys{/#1/SVlong} & \pgfkeys{/#2/SVlong} & \pgfkeys{/#3/SVlong}\\
+Morale: & \pgfkeys{/#1/MLlong} & \pgfkeys{/#2/MLlong} & \pgfkeys{/#3/MLlong}\\
+Treasure Type: & \pgfkeys{/#1/TT} & \pgfkeys{/#2/TT} & \pgfkeys{/#3/TT}\\
+Alignment: & \pgfkeys{/#1/AL} & \pgfkeys{/#2/AL} & \pgfkeys{/#3/AL}\\
+\end{tabularx}\par\vspace{\newmonsterbottomskip}\noindent\ignorespaces}{\vspace{\newmonsterbottomskip}\par\aftergroup\@afterindentfalse\aftergroup\@afterheading}
+
+\newenvironment{newmonster3}[3]{\begin{newmonster3*}{#1}{#2}{#3}{\pgfkeysvalueof{/#1/Type}}{\pgfkeysvalueof{/#1/SilverMagic}}}{\end{newmonster3*}}
+
+
+
+% A few special macros for stat blocks
+
+\newcommand\x{$\times$} % Text-mode multiplication symbol
+\newcommand\minus{$-$} % Text-mode minus sign
+\newcommand{\?}{\discretionary{/}{}{/}} % Breaking slash
+\newcommand{\+}{\discretionary{\,+}{}{\,+\,}} % Breaking + with 1/6 em space either side
+
+
+
+%
+% Load pre-defined monster stats
+%
+
+\input{basic-stats.def}
diff --git a/macros/latex/contrib/rpg-module/doc/rpg-module.tex b/macros/latex/contrib/rpg-module/doc/rpg-module.tex
new file mode 100644
index 0000000000..8c3dfcad32
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/doc/rpg-module.tex
@@ -0,0 +1,734 @@
+%% rpg-module.tex
+%
+% Documentation and worked example for the Role-Playing Game Module class
+%
+% Copyright 2016 Michael C. Davis
+%
+% LICENSE FOR THE WORK
+%
+% This work consists of the following files:
+% rpg-module.cls
+% basic-stats.sty
+% basic-stats.def
+% doc/rpg-module.tex
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version. The latest version of this license can be found at:
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `author-maintained'.
+%
+% The Author and Maintainer of this work is Michael C. Davis
+%
+%
+% OPEN GAME LICENSE
+%
+% The monster stats in this file are copyright 2000, Wizards of the Coast, Inc.
+% and are distributed with permission under the terms of the Open Game License v 1.0.
+% See the file rpg-module.cls or the compiled documentation file rpg-module.pdf for
+% the full text of the license.
+%
+%
+% LICENSE FOR COMPILED WORKS
+%
+% You may distribute compiled works generated using the work as specified in
+% Clause 3 of the LaTeX Project Public License. If you incorporate Open Gaming
+% Content into the compiled work, you must also comply with the terms of that
+% license.
+%
+%
+% USAGE
+%
+% In addition to this documentation, there are a number of worked examples in the
+% examples/ directory.
+%
+% Technical support is provided on Dragonsfoot Forums:
+%
+% http://www.dragonsfoot.org/forums/viewtopic.php?f=87&t=73823
+
+%% Start here!
+%
+% Load the rpg-module class. The following options are available:
+%
+% a4paper Use A4 paper size (default)
+% letterpaper Use US letter paper size
+% sansserif Use URW Gothic font (similar to ITC Avant Garde Gothic) (default)
+% serif Use ITC Souvenir if available, fall back to URW Bookman if not available
+% acdesc Use descending AC in stat blocks
+% acasc Use ascending AC in stat blocks
+% acb1 Use B1-style AC in stat blocks (inspired by http://zenopusarchives.blogspot.com/2014/02/ascending-ac-in-holmes-basic.html)
+% acsw Use Swords & Wizardry style AC in stat blocks
+% basic Use Basic stat blocks (default)
+% advanced Use Advanced stat blocks (not currently implemented, planned for a future release)
+%
+% In principle, stat blocks can be defined for any RPG system by defining the appropriate style file.
+% In this release of the class, only basic-stats.sty is defined.
+
+\documentclass[a4paper,serif]{rpg-module}
+
+\usepackage{lipsum} % This package generates filler text for
+ % the example file, not needed in a real project
+
+%\usepackage{parskip} % add spacing between paras instead of indents
+
+
+
+\begin{document}
+
+%% TITLE PAGE %%
+%
+% If you want a title page, define the elements you want, then use \maketitle (see below).
+%
+% It is required to define \title, even without a title page, as it is used for running heads for A4 paper size.
+
+\title{Dungeon Module X2$\varepsilon$\\
+An Adventure Module Class and Template}
+
+% The rest of the title page elements are optional
+
+\author{Michael C. Davis}
+
+\titlerunning{Dungeon Module X2$\varepsilon$ : Module Class} % Shorter title for running heads (A4 paper option only)
+
+\subtitle{Introductory module for character levels 1--3}
+
+\coverimage{rpg_module_cover_art.png}
+
+\abstract{This template is inspired by the old-school modules of the 1980s. It is an attempt to recapture the look and feel
+of those classic adventures using the power and beauty of the \LaTeX~typesetting system. The template is designed to allow
+authors to typeset their adventures with a minimum of effort. Write your adventure, add some simple markup notation as shown
+in the example file, and in a few clicks you will have a beautifully-formatted PDF.}
+
+\copyrightblock{The \LaTeX~rpg-module class is Copyright \copyright 2016 Michael Davis and is distributed under the terms
+of the \href{http://www.latex-project.org/lppl.txt}{LaTeX Project Public License} (LPPL) Version 1.3c. You are free to use this
+class to generate works for distribution, for free or commercially, as detailed in Clause 3 of the license.
+
+Some parts of the template are Copyright \copyright 2000--2003 Wizards of the Coast and are distributed under the
+\hyperref[ogl]{Open Game License (OGL)} Version 1.0A.
+
+The images and maps in this example template are not covered by the LPPL. See the license for each work.}
+
+% The contact block is to typeset your logo(s), company name and/or contact details. It consists of three columns; you
+% can use any or all of them. By default the columns are top-aligned and of equal width, but you can redefine this in the
+% optional argument. See the documentation of the LaTeX tabular environment for details.
+
+\contactblock[p{2.9cm} p{5.0cm} p{9.8cm}]{% column 1 : logo
+\begin{center}
+\includegraphics[width=1.5cm]{rpg_module_logo.pdf}
+\end{center}
+}{% column 2 : empty in this example
+}{% column 3 : contact details
+\vspace{0.4cm}
+\begin{flushright}
+The author can be contacted on Dragonsfoot (user:
+\href{http://www.dragonsfoot.org/forums/ucp.php?i=pm&mode=compose&u=7317}{slithy}).\\[0.5em]
+
+Support for the rpg-module class and this template will be provided on the
+\href{http://www.dragonsfoot.org/forums/viewtopic.php?f=87&t=73823}{Dragonsfoot Computer Gaming \& Utilities} forum.
+\end{flushright}
+}
+
+% Typeset the title page from the elements above. Remove \maketitle if you don't want a title page.
+
+\maketitle
+
+
+
+%% START OF PAGE 1 %%
+%
+% Display the title text again at the top of the first column.
+% Or, use \showtitle[newtext] to use newtext in place of the previously-defined title.
+
+\showtitle
+
+This file is a tutorial and example of how to use the rpg-module class to typeset your fantasy role-playing game adventure.
+
+\part{Introduction}
+
+The rpg-module class is a free resource for authors of adventure modules for fantasy roleplaying games.
+It is inspired by the look and feel of the 1981 ``Red Book'' Basic incarnation of the world's most popular FRPG.
+
+To prepare your work using this class, you will need \LaTeX, a free document preparation system for high-quality
+typesetting. The rpg-module class was developed and tested using \TeX Live, which you can download from
+\href{https://latex-project.org/ftp.html}{the \LaTeX~Project website}.
+
+Unlike a conventional word processor, the \LaTeX~philosophy is to separate the job of writing and editing content
+from the job of typesetting it for publication. Authors can concentrate on writing their text without fussing
+about what fonts to choose or what size the page margins or table columns should be. The rpg-module class takes care
+of all that. Another advantage is that all documents produced using this template will have a similar look and
+feel, so if you want to publish a series of works they will appear consistent.
+
+\LaTeX~uses a markup language in order to describe document structure and presentation. This
+file---\verb|rpg-module.pdf|---was created from the markup file \verb|rpg_module.tex|. If you open \verb|rpg_module.tex|
+in an ordinary text editor, you will see the markup commands and some explanatory comments (prefixed by \%).
+\LaTeX~converts your source text, combined with the markup and the rpg-module class, into a high quality PDF document.
+
+You can find numerous tutorials online to get you started with the basics of document preparation using \LaTeX.
+Part~\ref{using_the_module_class} of this document explains the features of the rpg-module class. Part~\ref{example_dungeon}
+is an example of how to create a dungeon module using the class.
+
+\part{Using the Module Class}
+\label{using_the_module_class}
+
+\section{Class Options}
+
+At the beginning of your document, load the rpg-module class with \verb|\documentclass[<options>]{rpg_module}|. You can
+specify the following options:
+
+\begin{tabularx}{\linewidth}{lX}
+\verb|a4paper| & Use A4 paper size (default)\\
+\verb|letterpaper| & Use US letter paper size\\
+\verb|sansserif| & Use a sans-serif font, URW Gothic (default).\\
+\verb|serif| & Use a serifed font. This option will use ITC Souvenir if available, URW Bookman otherwise.\\
+\verb|tightsqueeze| & Reduce the spacing between table rows and around headings for a more compact layout.\\
+\verb|acdesc| & Use descending AC in stat blocks (default for Basic stats)\\
+\verb|acasc| & Use ascending AC in stat blocks\\
+\verb|acb1| & Use \href{http://zenopusarchives.blogspot.com/2014/02/ascending-ac-in-holmes-basic.html}{the B1 AC style} in stat blocks\\
+\verb|acsw| & Use \href{http://www.swordsandwizardry.com/}{Swords \& Wizardry} AC style in stat blocks\\
+\verb|basic| & Use Basic monster stat blocks (default)\\
+\verb|advanced| & Use Advanced monster stat blocks (not yet implemented, planned for a future release)\\
+\end{tabularx}
+
+\subsection*{Paper Size}
+
+rpg-module supports the letter paper size (used in USA) and A4 (used in Europe and the rest of the world). Changing the paper size
+does not scale the text on the page; rather it adjusts the margins so the pages will be typeset identically regardless
+of which size is selected. This allows module writers to easily create two almost identical PDFs for use in different regions.
+
+As A4 pages are slightly taller, you have the option of a running header if you select \verb|a4paper|. This option is not available
+in Letter paper size.
+
+\subsection*{Fonts}
+
+You can select a serifed or sans-serif font. The default font is URW Gothic (sans-serif), a free font which is similar to
+ITC Avant Garde Gothic. Avant Garde was used in many early TSR modules, including B1 and B2.
+
+If you choose the serif option, the rpg-module class will try to use ITC Souvenir. Souvenir is used for the 1981 Basic rulebook
+and modules including B3 (Green cover), X1 and X2. However, it is a commercial font which is
+not distributed with \LaTeX. If you don't have Souvenir installed, the rpg-module class will use URW Bookman instead, which is
+included in the standard \TeX Live distribution.
+
+If you want to obtain the Souvenir font, note that it was bundled with some versions of CorelDraw. It is more economical to buy
+CorelDraw with its bundled font license than to buy the font directly from the foundry.
+To configure the font for use with \LaTeX, you need the Adobe Type 1 font definitions (.pfb and .afm files) from CorelDraw
+and the corresponding LaTeX .tfm and .vf files, which you can obtain from the \href{https://www.ctan.org/pkg/corelpak}{Corelpak} package. The
+\href{https://www.ctan.org/pkg/corelpak-contrib}{Corelpak-contrib} package may also be useful to help with installation.
+
+\subsection*{Stat Blocks}
+
+The rpg-module class is designed to be extensible. This version of the class includes Basic-style monster stat blocks
+(\verb|basic|). See p.\pageref{stat_blocks} for more detail.
+
+\verb|advanced| stat blocks are planned for the next version of the class. In principle it is possible to define a new stat
+block format for any RPG system. If several systems are defined, authors can compile the same work with stats for different
+systems simply by changing the option passed to \verb|documentclass|.
+
+\section{Layout Options}
+
+\subsection*{Headings}
+
+The defined heading styles are listed in Table~\ref{tab:heading_styles}.
+If you want a table of contents in your document, simply place a \verb|\tableofcontents| command where you would like it to appear.
+
+\begin{table}[ht]
+\begin{tabularx}{\linewidth}{lp{0.25\linewidth}>{\raggedright\arraybackslash}X}
+\tableheader{Style & Description & Features}
+\texttt{\textbackslash part} & Chapter heading & Numbered, included in table of contents (ToC)\\
+\texttt{\textbackslash section} & Section heading & Not numbered, left justified, upper case, included in ToC\\
+\texttt{\textbackslash section*} & Section heading (alternate) & Not numbered, centred, included in ToC\\
+\texttt{\textbackslash subsection} & Location key & Numbered, not included in ToC\\
+\texttt{\textbackslash subsection*} & Subheading/Table heading & Not numbered, not included in ToC\\
+\texttt{\textbackslash subsubsection} & Sub-location key & Numbered with number and letter: ``7a.'' Not included in ToC\\
+\texttt{\textbackslash subsubsection*} & Sub-location key & Not numbered, not included in ToC\\
+\end{tabularx}
+\caption{Heading Styles}
+\label{tab:heading_styles}
+\end{table}
+
+Location keys are numbered automatically starting from 1, and numbering is restarted after each section heading. You can override
+the default numbering using the \verb|\setcounter| macro. For example, to continue the location key numbering starting at 20 on the
+second level of your dungeon, insert \verb|\setcounter{subsection}{19}| before the first subsection heading on level 2.
+
+\subsection*{Boxed Text}
+
+To draw a box around any text, enclose it in the \verb|boxtext| environment:
+
+\begin{boxtext}
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut
+purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis.
+Curabitur dictum gravida mauris. Nam arcu libero, nonummy
+\end{boxtext}
+
+\subsection*{Tables}
+
+The rpg-module class uses the standard \verb|tabular| environment for tables. It defines a new \verb|\tableheader| macro which centres
+the table headings and writes a horizontal rule of the correct width under each one, in the same style as the Basic rulebook.
+
+You need to specify the number and format of each column in your table as usual: \verb|l| for left-aligned, \verb|c| for centred
+and \verb|r| for right-aligned. The class also provides a new \verb|b| column type for bold, centred headings.
+
+Here is an example. The table below has two columns: one centred and one left-aligned. So the table format
+is defined using \verb|\begin{tabular}{cl}|. The heading rows are defined as bold and centred: \verb|\tableheader[b]{Damage & Weapon Type}|.
+
+\section*{New Weapon Damage Table}
+
+\begin{center}
+\begin{tabular}{cl}
+\tableheader[b]{Damage & Weapon Type}
+1-4 (1d4) & Throwing Stick\\
+1-6 (1d6) & Composite Bow\\
+1-4 (1d4) & Cutting Axe\\
+1-6 (1d6) & Piercing Axe\\
+1-8 (1d8) & Khopesh\\
+6-36 (6d6) & Chariot\\
+\end{tabular}
+\end{center}
+
+If you need to squeeze wide tables into a text column, you can control the inter-column spacing using \verb|\tabcolsep|,
+like this:
+
+\section*{Character Attacks}
+
+\begin{center}
+\addtolength{\tabcolsep}{-4.1pt}
+\begin{tabular}{lccccccccccccc}
+\tableheader{Attacker's Level & 9 & 8 & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 & -1 & -2 & -3}
+Normal man & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 20 & 20 & 20 & 20\\
+1st to 3rd & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 20 & 20 & 20\\
+4th + higher & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 20\\
+\end{tabular}
+\addtolength{\tabcolsep}{4.1pt}
+\end{center}
+
+\vspace{1ex}\noindent The rpg-module class also defines two special-purpose tables: the Wandering Monster table and Monster Roster table. These tables
+have pre-defined headings and each line is populated using a monster stat block (see the next section).
+
+\noindent Wandering Monster tables are defined with:
+\begin{quote}
+\verb|\begin| \verb|{wanderingmonsters}[style]|
+\end{quote}
+The optional \verb|[style]| argument specifies the column type for headers. The \verb|[b]| style uses the same bold,
+centred style used for the New Weapon Damage Table above. Each line of the Wandering Monster table is defined using:
+\begin{quote}
+\verb|\wanderitem[die roll]{monstername}{no. appearing}|
+\end{quote}
+\verb|[die roll]| is optional; if you omit it, each row will be numbered consecutively starting at 1. If you want to
+roll 2d6 for wandering monster determination, then put \verb|[2]| on the first row and the following rows will be numbered
+consecutively. Or if you want to use ranges, you can specify the range for each line like this: \verb|[01--10]|.
+(A point of typographic pedantry: in \LaTeX, two hyphens will be typeset as an en-dash, ``--'', which is the correct length
+of dash to use for numeric ranges. For parenthetical dashes use three hyphens to get the longer em-dash, ``---'').
+
+\verb|{monstername}| is the key for the stat block; see the next section for an explanation.
+\verb|{no. appearing}| is optional; if you leave it empty, the rpg-module class will use the default number appearing as defined in the stat block.
+
+The Monster Roster table is similar, but the table headings are slightly different. Define the table with:
+\begin{quote}
+\verb|\begin{monsterroster}[style]|
+\end{quote}
+The first column is the location key, and there is an extra column for hit points. Each line in
+the table is defined using:
+\begin{quote}
+\hspace{-2em}\verb|\rosteritem{locationkey}{monstername}{number}{hitpoints}|
+\end{quote}
+If the location key is defined as a \LaTeX~reference, the class will generate the correct location number and create a hyperlink to that section.
+
+You can see examples of Wandering Monster and Monster Roster tables on p.\pageref{wanderingmonsters}.
+
+\section{Monster Stat Blocks}
+\label{stat_blocks}
+
+The Basic stats style included with the rpg-module class has stats for all of the monsters in the Basic and Expert rulebooks.
+To typeset a statblock, simply use:
+\begin{quote}
+\verb|\statblock{monstername}{noappearing}{hitpoints}|
+\end{quote}
+The rpg-module class will work out the correct singular or plural forms automatically, so
+\verb|\statblock{gnoll}{1}{10}| gives:
+\statblock{gnoll}{1}{10}
+while \verb|\statblock{gnoll}{5}{16,14,12,9,8}| gives:
+\statblock{gnoll}{5}{16,14,12,9,8}
+If you prefer, there is also an inline style:
+\begin{quote}
+\hspace{-2em}\verb|\stats[description]{monstername}{noappearing}{hitpoints}|
+\end{quote}
+where the optional \verb|[description]| overrides the default name of the monster.
+For example:\\[0.1em]
+
+\noindent You find yourself face to face with the \stats[Gnoll Chieftain!]{gnoll}{1}{16}. He is flanked
+by \stats[12 bodyguards: ]{gnoll}{12}{10 each}.\\[0.1em]
+
+\noindent You can of course also define new monsters beyond those in the Basic and Expert rulebooks. Define the new
+monster once at the beginning of your document, and then you can use it in the same way as the predefined
+monsters above. The format for a new monster definition is:
+\begin{quote}
+\verb|\monster[pluralname]{label}{name}{stats}|
+\end{quote}
+where \verb|label| is the key you want to use for the monster (\verb|gnoll| in the examples above) and
+\verb|name| is the (singular) name of the monster that will be displayed in the text, ``Gnoll''. The rpg-module
+class can usually work out the plural form by following some simple rules, but if the plural is unusual,
+you can specify it in the optional \verb|pluralname| field. For example, if you define:
+\begin{quote}
+\verb|\monster{octopus}{Octopus}{|\ldots
+\end{quote}
+you will get the default plural, ``Octopuses''. If you decide that the plural should instead be ``Octopodes'', you can override the default definition:
+\begin{quote}
+\verb|\monster[Octopodes]{octopus}{Octopus}{|\ldots
+\end{quote}
+
+\noindent The \verb|stats| field is a list of the monster stats, separated by ``\verb:|:''. It should contain the following items in order:
+\renewcommand{\labelitemi}{$\bullet$}
+\begin{itemize}\setlength{\itemsep}{0pt}
+\item Type. This is only required where the monster is a subspecies of a general type, e.g. ``Dragon'', ``Lycanthrope'' or ``Man''. In all other cases
+it should be left blank.
+\item Put an asterisk (*) in this column if the monster requires silver, magic or special weapons to hit it. Leave empty otherwise.
+\item \ArmourClass. This should be in descending AC format; use the \verb|acasc| option to the class if you want to convert it to ascending AC.
+\item Hit Dice (including * or ** if applicable)
+\item Movement per Turn
+\item Movement per Round
+\item Special Movement class, e.g. ``Fly'' or ``Swim''. Leave blank in most cases.
+\item Special Movement per Turn
+\item Special Movement per Round
+\item Attacks (short form). Usually just the number of attacks, or ``3+special''. This format is used only in Wandering Monster and Monster Roster tables.
+\item Attacks (long form). More verbose description of attacks, used in New Monster listing and stat blocks, e.g. ``2 claws\?bite\+breath''.
+\footnote{Note that the slash character \texttt{/} is non-breaking (\LaTeX~will not place a line break after \texttt{/}). The rpg-module class provides a breaking
+slash \texttt{\textbackslash ?} to overcome this problem. The class also provides \texttt{\textbackslash +}, which is a breaking version of +. Use of
+\texttt{\textbackslash ?} and \texttt{\textbackslash +} in the long attack and damage fields prevents awkward line breaks in stat blocks.}
+\item Damage (short form). Used in Wandering Monster and Monster Roster tables.
+\item Damage (long form). Used in New Monster listing and stat blocks.
+\item Save As. List the long form, e.g. ``Fighter: 3''. The short form is computed where required.
+\item Morale
+\item Alignment. List the long form, e.g. ``Chaotic''. The short form is computed where required. In case of monsters with variable alignment, specify ``Any''
+here, and use the \verb|\changealignment| macro to specify as needed in the text. (For example, the Acolyte is defined with alignment Any but is given a specific
+alignment in the Wandering Monster table on p.\pageref{wanderingmonsters}.)
+
+\item No. Appearing. List the range when encountered as a wandering monster.
+\item No. Appearing in Lair. List the range when encountered in the monster's lair or in the wilderness.
+\item Treasure Type
+\item XP
+\end{itemize}
+
+\noindent For example, suppose we create the following definition:\\[0.1em]
+
+\monster[Minions of Set]{minion_set}{Minion of Set}{||0|5**|120'|40'||||1/1|weapon or bite or by form|1d8/1d12+poison|1d8 or 1d12+poison or by form|Fighter: 10|12|Chaotic|1--6|1--20|Nil|425}
+
+\noindent\texttt{\textbackslash monster[Minions~of~Set]\{minion\_set\}\{Minion~of~Set\}\{||0|
+5**|120'|40'||||1/1|weapon~or~bite~or~by~form|
+1d8/1d12+poison|1d8~or~1d12+poison~or~by~form|
+Fighter:~10|12|Chaotic|1--6|1--20|Nil|425\}}\\[0.1em]
+
+\noindent Now any time we want to put stats for a Minion of Set in our text, we can use a definition like this:
+\begin{quote}
+\verb|\statblock{minion_set}{4}{25 each}|
+\end{quote}
+which produces a stat block like this:
+\statblock{minion_set}{4}{25 each}
+You can add details of your new monster with the environment:
+\begin{quote}
+\verb|\begin{newmonster}{minion_set}|
+\verb|Text description of your monster here|\ldots\\
+\verb|\end{newmonster}|
+\end{quote}
+You can see an example of what this looks like on p.\pageref{minion_set}.
+
+If you want to redefine an existing monster, you can do so using exactly the same commands.
+
+Finally, there is the \verb|statblockfreestyle| environment. This should be used sparingly; for most monsters, you should use
+the standard macros to ensure consistency. However, sometimes you may want to include extra information which does not
+fit into the standard stat blocks, such as the attributes of NPCs or spell lists:
+
+% Define the standard stat block as well for use in tables
+
+\monster{snefru_hotep}{Snefru-Hotep}{||5|C5|90'|30'||||1|mace or spell|1d6/spell|1d6 or spell|Cleric: 5|11|Chaotic|1|1|Nil|300}
+
+\begin{statblockfreestyle}
+\begin{ifbasicstats}
+Snefru-hotep, Cleric of Set, S9 I15 W17 D10 C8 Ch15. AC 5 (chain mail), C5, hp 21, MV 90'\,(30'), Att mace, D 1--6, Save C5, ML 11, AL C.
+He can cast the following spells: Protection from Good, Cause Fear, Snake Charm, Hold Person.
+\end{ifbasicstats}
+\begin{ifadvancedstats}
+Snefru-hotep, Cleric of Set, S9 I15 W17 D10 C8 Ch15. AC 5 (chain mail), C5, hp 21, MV 9", Att mace, D 2--7, AL LE.
+He can cast the following spells: Protection from Good, Cause Fear, Cause Light Wounds ($\times 2$), Darkness,
+Snake Charm, Hold Person, Slow Poison, Spiritual Hammer, Speak with Animals, Animate Dead, Curse.
+\end{ifadvancedstats}
+\end{statblockfreestyle}
+
+\noindent When using \verb|statblockfreestyle|, the rpg-module class provides \verb|ifbasicstats| and \verb|ifadvancedstats| macros to specify separate
+stat blocks for different RPG systems.
+
+The rest of this document shows a full example of how an adventure can be typeset using the rpg-module class.
+
+\newpage
+
+%%%%% Level One %%%%%
+
+% Float the map on a page on its own
+
+\begin{figure*}[p]
+\centering
+\includegraphics[width=0.75\textwidth]{rpg_module_map.png}
+\vspace{5ex}
+\caption*{Map Copyright \copyright 2008, 2016 Tim Hartin of
+\href{http://paratime.ca}{Paratime Design}. Used with permission. All rights reserved.}
+\label{img:map}
+\end{figure*}
+
+\part{First Dungeon Level}
+\label{example_dungeon}
+
+\section*{Key to Dungeon Level One}
+
+\subsection*{Start}
+
+\begin{boxtext}
+You have traveled across the desert for many days. Ahead in the distance you can see a large stone
+structure rising above the sand.
+\end{boxtext}
+
+The structure is the fabled Temple of Set. Within, the evil priests of Set plan world domination.
+A tribe of gnolls revere the site and guard the outer precincts.
+
+\subsection{The Portico} % Key 1
+\label{portico}
+
+The gnolls do not live within the temple; their settlement is a short distance away. But every day they
+send a small delegation to petition the priests and seek the power of Set. They will be hostile towards
+strangers.
+
+\begin{boxtext}
+The building is made of cyclopean blocks of granite rising above the desert sands. You wonder how such
+an edifice could have been constructed here, so far from any obvious habitation. Surely thousands of
+workers---slaves in all probability---must have been employed in building it.
+
+The facade of the edifice is some 150' across. Huge stone steps lead up to a portico, which is flanked
+by six immense pillars.
+\end{boxtext}
+
+There are 13 steps, each 3' tall and thus difficult to climb. The pillars are embossed with heiroglyphs
+which (could the players read them), tell the story of Set's rise to power, his conquests and the
+bitter enmity which exists between him and his brother Osiris.
+
+On the porch at the top of the stairs, a group of Gnoll petitioners keep watch. When they perceive
+the party from afar, they will hide behind the pillars. As the party begin to mount the steps, they will
+spring out and hurl their javelins (1d6+1 dmg). They are also armed with spiked clubs:
+\statblock{gnoll}{6}{9 each}
+The gnolls each carry 1d4 ep and 2d10 cp.
+
+On the porch, behind the pillars and not visible from below, are eight statues\ldots
+
+\subsection{Vestibule} % Key 2
+
+\begin{boxtext}
+\lipsum[1]
+\end{boxtext}
+
+\lipsum[2]
+
+\subsection{Central Aisle} % Key area 3
+
+\begin{boxtext}
+\lipsum[3]
+\end{boxtext}
+
+\lipsum[4]
+
+\subsection{East Court} % Key area 4
+
+\lipsum[5]
+
+\subsection{West Court} % Key area 5
+
+\lipsum[6]
+
+\subsection{Great Hypostyle Hall} % Key area 6
+\label{hypostyle_hall}
+
+% Floating image
+
+\begin{figure}[t]
+\includegraphics[width=\columnwidth]{rpg_module_interior_art.png}
+\center{Tomb It May Concern.\\
+Image Copyright \copyright 1987, 2016 Michael Davis. All rights reserved.}
+\label{img:tomb}
+\end{figure}
+
+\lipsum[7-8]
+
+\subsection{The Court of Set's Wives} % Key area 7
+
+\lipsum[9]
+
+\subsubsection{Statue of Nephthys} % Key area 7a
+\label{west_court}
+
+The statue of Nephthys, Set's first wife, is 20' tall. She is styled as a very beautiful woman dressed in the
+style of Egyptian royalty\ldots
+
+\subsubsection{Statue of Taweret} % Key area 7b
+
+The statue of Taweret, another of Set's wives, appears as a hippo-headed humanoid. Her upper torso is bare\ldots
+
+\vdots
+
+\setcounter{subsection}{13} % Skip areas 8-13
+
+\subsection{Inner Sanctuary} % Key area 14
+\label{inner_sanctuary}
+
+This area is guarded by the priest of Set, Snefru-hotep, and four Minions of Set!
+\begin{statblockfreestyle}
+\begin{ifbasicstats}
+Snefru-hotep, Cleric of Set, S9 I15 W17 D10 C8 Ch15. AC 5 (chain mail), C5, hp 21, MV 90'\,(30'), Att mace, D 1--6, Save C5, ML 11, AL C.
+He can cast the following spells: Protection from Good, Cause Fear, Snake Charm, Hold Person.
+\end{ifbasicstats}
+\begin{ifadvancedstats}
+Snefru-hotep, Cleric of Set, S9 I15 W17 D10 C8 Ch15. AC 5 (chain mail), C5, hp 21, MV 9", Att mace, D 2--7, AL LE.
+He can cast the following spells: Protection from Good, Cause Fear, Cause Light Wounds ($\times 2$), Darkness,
+Snake Charm, Hold Person, Slow Poison, Spiritual Hammer, Speak with Animals, Animate Dead, Curse.
+\end{ifadvancedstats}
+\end{statblockfreestyle}
+\statblock{minion_set}{4}{25 each}
+\lipsum[10-11]
+
+%%%%% Page break and switch to one-column mode %%%%%
+
+\onecolumninline{\part{Second Dungeon Level}
+
+The rpg-module class allows you to switch between double- and single- column modes within your document. The
+\texttt{\textbackslash onecolumn} command will cause a page break and switch to one-column mode. Likewise,
+the \texttt{\textbackslash twocolumn} command will cause a page break and switch back to two-column mode.
+
+To mix one- and two-column text on the same page, you have two options. The \texttt{\textbackslash onecolumninline}
+command takes one parameter, which is the text to typeset in single-column mode. This command causes a page
+break, typesets the single-column text at the top of the page, then continues in two-column mode as before. This
+text has been set using \texttt{\textbackslash onecolumninline}.
+
+The second option is to use the \texttt{onecolumnfloat} environment, which creates a \LaTeX~float the full width
+of a page. This can be positioned using the usual float parameters, e.g. \texttt{[t]} for the top of the page
+and \texttt{[b]} for the bottom. This option is most suitable where you want to have a table or ``sidebar'' text
+which is separate from your main text body. You can float graphics in the same way using the
+\texttt{figure*} environment, as we do for the map on p.\pageref{img:map}.
+
+It is not possible to mix \texttt{\textbackslash onecolumninline} and \texttt{\textbackslash onecolumnfloat} on
+the same page.
+
+\section*{Wandering Monsters}
+\label{wanderingmonsters}
+
+% Change the alignment of Acolytes from ``Any'' to ``Chaotic''
+
+\changealignment{acolyte}{Chaotic}
+
+\begin{wanderingmonsters}[b]
+\wanderitem{crocodile}{1--2}
+\wanderitem{rock_baboon}{}
+\wanderitem{pit_viper}{}
+\wanderitem[4-6]{gnoll}{}
+\wanderitem[7-8]{acolyte}{}
+\wanderitem[9]{minion_set}{1}
+\wanderitem{snefru_hotep}{}
+\end{wanderingmonsters}
+
+\section*{Monster Roster}
+
+\begin{monsterroster}
+\rosteritem{\ref{portico}}{gnoll}{6}{9 each}
+\rosteritem{\ref{inner_sanctuary}}{snefru_hotep}{1}{21}
+\rosteritem{\ref{inner_sanctuary}}{minion_set}{4}{25 each}
+\end{monsterroster}
+} % end of \onecolumninline
+
+\noindent\lipsum[12-14]
+
+\section{Concluding the Adventure}
+
+\lipsum[12-13]
+
+\newpage
+
+%
+% New Monsters part
+%
+
+\part{New Monsters}
+
+% If you had a picture of a minion of set you could include it here
+%\includegraphics[width=\linewidth]{minion_of_set.jpg}
+
+\begin{newmonster}{minion_set}\label{minion_set}%
+Minions of Set serve their master, the god of evil and the night, with unswerving devotion. In combat, they
+never need to check morale. They are the implacable enemies of the servants of Osiris and Horus.
+
+In human form, the Minions of Set wear scaly black plate armour and weild curved khopesh swords. Once per
+day, they can polymorph themselves into the form of a giant snake with a poisonous bite. Some minions can
+transform themselves into cave bears, giant crocodiles or giant scorpions.
+\end{newmonster}
+
+\part{License Information}
+
+The \LaTeX~rpg-module class is Copyright \copyright 2016 Michael Davis and is distributed under the terms of the
+\href{http://www.latex-project.org/lppl.txt}{LaTeX Project Public License} (LPPL) Version 1.3c.
+
+You are free to use the class to generate works for your own private use and/or for distribution as detailed in
+Clause 3 of the license. There is no restriction on commercial use.
+
+An acknowledgement is much appreciated: you can use the \verb|\modulecopyright| macro to insert an acknowledgement
+block. No payment is required or expected, but if you become extremely wealthy from the sales of a module
+you typeset using this class and wish to express your appreciation you are welcome to do so via
+\href{https://paypal.me/slithy}{PayPal}.
+
+%
+% License section
+%
+
+\section{Open Game Content}
+\label{ogl}
+
+The template includes three macros to make it easy to distribute your work under the Open Game License
+from Wizards of the Coast: \verb|\ogl|, \verb|\productidentity| and \verb|\opengamecontent|. These three
+macros produce the license text below:
+
+\begin{ogl}
+% This environment includes the complete text of the OGL v1.0A. Within the environment, you should include
+% the exact text of the COPYRIGHT NOTICE of any other OGL text you are copying, modifying or distributing.
+% Usually this will include the title, copyright date and copyright holder's name(s). Example:
+\item System Reference Document, Copyright \copyright 2000--2003, Wizards of the Coast, Inc., by Jonathan Tweet, Monte Cook,
+Skip Williams, Rich Baker, Andy Collins, David Noonan, Rich Redman, Bruce R. Cordell, John D. Rateliff, Thomas Reid, James
+Wyatt, based on original material by E. Gary Gygax and Dave Arneson.
+\end{ogl}
+
+\begin{productidentity}
+\item The text of this \LaTeX~rpg-module class and example template, which comprises all typesetting elements and all text which
+is not explitly Open Game Content, is Product Identity.
+\modulecopyright
+
+\item All photographs, artwork and maps in this template are Product Identity.
+
+\item The cover image is adapted from an original image on
+\href{https://commons.wikimedia.org/wiki/File:Karnak_Tempel_Vorhof_05.jpg}{Wikimedia Commons}, copyright \copyright 2009 Olaf
+Tausch. Used with permission under the terms of the
+\href{https://creativecommons.org/licenses/by/3.0/deed.en}{Creative Commons Attribution 3.0 Unported} license.
+
+\item The map on p.\pageref{img:map} is copyright \copyright 2008, 2016 Tim Hartin of \href{http://paratime.ca}{Paratime Design}.
+Used with permission. All rights reserved.
+
+\item The drawing on p.\pageref{img:tomb} is copyright \copyright 1987, 2016 Michael Davis. All rights reserved.
+\end{productidentity}
+
+\begin{opengamecontent}
+\item The monster statistics from the SRD are Open Game Content.
+\end{opengamecontent}
+
+\newpage
+
+%
+% Table of Contents
+%
+
+\tableofcontents
+
+% If you would also like to include an index for your document, see the LaTeX makeidx package
+
+\end{document}
diff --git a/macros/latex/contrib/rpg-module/doc/rpg_module_cover_art.png b/macros/latex/contrib/rpg-module/doc/rpg_module_cover_art.png
new file mode 100644
index 0000000000..2f8cef2645
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/doc/rpg_module_cover_art.png
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/doc/rpg_module_interior_art.png b/macros/latex/contrib/rpg-module/doc/rpg_module_interior_art.png
new file mode 100644
index 0000000000..26ce36a906
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/doc/rpg_module_interior_art.png
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/doc/rpg_module_logo.pdf b/macros/latex/contrib/rpg-module/doc/rpg_module_logo.pdf
new file mode 100644
index 0000000000..0a08e75f3b
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/doc/rpg_module_logo.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/doc/rpg_module_map.png b/macros/latex/contrib/rpg-module/doc/rpg_module_map.png
new file mode 100644
index 0000000000..467cda729a
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/doc/rpg_module_map.png
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/examples/README.examples b/macros/latex/contrib/rpg-module/examples/README.examples
new file mode 100644
index 0000000000..ef535f3b4a
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/README.examples
@@ -0,0 +1,23 @@
+This directory contains the following examples of how to use the rpg_module class:
+
+monster_manual.tex A complete listing of all the monsters from basic_stats.sty,
+ in new monster format, stat block format and wandering monster
+ table format.
+
+b1.tex Reproduction of p.21-22 of B1: In Search of the Unknown, by
+ Mike Carr. Copyright 1979, 1981 TSR Hobbies, Inc.
+
+b3.tex Reproduction of p.22-23 of B3: Palace of the Silver Princess,
+ by Jean Wells and Tom Moldvay. Copyright 1981 TSR Hobbies, Inc.
+
+x2.tex Reproduction of p.1-2 of X2: Castle Amber by Tom Moldvay.
+ Copyright 1981 TSR Hobbies, Inc.
+
+basic.tex Reproduction of p.B45-B46 of the Dungeons & Dragons Basic
+ Rulebook by Tom Moldvay. Copyright 1981 TSR Hobbies, Inc.
+
+Copyright for the original works reproduced above originally belonged to TSR Hobbies, Inc.
+and now belongs to Wizards of the Coast, Inc. The text and artwork in these examples is
+reproduced under "fair use" copyright terms, for the purpose of comparing typographic
+styles. The original works can be purchased in PDF format from Wizards of the Coast at
+www.dndclassics.com.
diff --git a/macros/latex/contrib/rpg-module/examples/b1.pdf b/macros/latex/contrib/rpg-module/examples/b1.pdf
new file mode 100644
index 0000000000..c4cc827497
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/b1.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/examples/b1.tex b/macros/latex/contrib/rpg-module/examples/b1.tex
new file mode 100644
index 0000000000..0274f3bedd
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/b1.tex
@@ -0,0 +1,301 @@
+\documentclass[letterpaper,sansserif,tightsqueeze]{rpg-module}
+
+\usepackage{parskip} % Add spacing between paras instead of indents
+
+\title{B1: In Search of the Unknown}
+
+% Compress title spacing compared to default
+
+\addtolength{\topmargin}{-0.3cm}
+\addtolength{\textheight}{0.7cm}
+
+% Initialise counters
+
+\setcounter{page}{20}
+
+\begin{document}
+
+\onecolumn
+
+\begin{center}
+Page intentionally left blank.
+\end{center}
+
+\twocolumn
+
+\section*{KEY TO THE LOWER LEVEL}
+
+The lower level of the complex is rough and unfinished. The
+walls are irregular and coarse, not at all like the more finished
+walls of the level above (except for the two rooms on
+this level which are more like those in the upper portion and
+in a state of relative completion). The corridors are roughly
+10' wide, and they are irregular and rough, making mapping
+difficult. The floors are uneven, and in some cases rock
+chips and debris cover the pathways between rooms and
+chambers. The doors are as in the upper level, but the secret
+doors are either rock or disguised by rock so as to appear
+unnoticeable.
+
+\section{WANDERING MONSTERS}
+
+Check every second turn; 1 in 6 (roll a 6-sided die). If a monster
+is indicated, roll a six-sided die again and compare to
+the list below to determine what type of monster appears.
+Then check for surprise. The abbreviations which follow are
+the same as used and explained in the section entitled MONSTER
+LIST.
+\begin{enumerate}
+\item\stats{troglodyte}{1--4}{9,8,5,4}
+\item\stats{crab_spider}{1}{12}
+\item\stats{kobold}{2--7}{4,4,3,3,2,2,1}
+\item\stats{orc}{1--8}{6,5,5,4,4,3,3,2}
+\item\stats{zombie}{1--2}{8,7}
+\item\stats{goblin}{2--7}{5,5,4,4,3,2,1}
+\end{enumerate}
+
+\section{ENCOUNTER AREAS}
+
+\setcounter{subsection}{37}
+
+\subsection{ACCESS ROOM}
+This room is filled with piles of rock and
+rubble, as well as mining equipment: rock carts, mining
+jacks, timbers, pickaxes, etc. It is apparent that there has
+been no mining activity for quite some time.
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{MUSEUM}
+This room is an unfinished museum, a special
+monument to the achievements of the stronghold's most illustrious
+inhabitants.
+
+The west wall is a sectioned fresco showing various events
+and deeds from the life of Rogahn, and the several views
+pictured are: a young boy raising a sword, a young man
+slaying a wild boar, a warrior carrying off a dead barbarian,
+and a hero in the midst of a large battle hacking barbarian
+foes to pieces.
+
+The east wall is a similar sectioned fresco showing cameos
+from the life of Zelligar: a boy gazing upward at a starry night
+sky, a young man diligently studying a great tome, an earnest
+magician changing water to wine before a delighted
+audience, and a powerful wizard casting a type of death
+fog over an enemy army from a hilltop.
+
+The north wall section is unfinished, but several sections of
+frescoes show the two great men together: shaking hands for
+the first time in younger days, winning a great battle against
+barbarians in a hill pass, gazing upward together from the
+wilderness to a craggy rock outcropping (recognizable to
+the adventurers as the place where the stronghold was built),
+with a fourth space blank. Next to the frescoes are other mementoes
+from the past: a parchment letter of thanks for help
+in the war against the barbarians from a prominent landowner,
+a barbarian curved sword, and a skeleton of the barbarian
+chief (so identified by a wall plaque in the common
+language). There is more blank space on the wall, apparently
+for further additions to the room's collection of items.
+
+The frescoes are painted and they cannot be removed.
+None of the mementoes is of any particular worth or value.
+
+Monster:
+
+Treasure \& Location:
+
+\section{40--56. CAVERNS OF QUASQUETON}
+
+\setcounter{subsection}{39}
+
+The bulk of the lower
+level of the complex is a series of unfinished caves and caverns,
+which are mostly devoid of special detail—all being
+characterized by irregular walls of rough rock. Uneven floors
+strewn with bits of rock and rubble, and joined by winding
+corridors. The majority of the rooms are empty of furnishings.
+
+\subsection{SECRET CAVERN}
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{CAVERN}
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{WEBBED CAVE}
+
+The entrance to this room is covered
+with silky but sticky webs, which must be cut or burned
+through to gain access to it. See web spell for details in D\&D
+Basic booklet.
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{CAVERN}
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{CAVERN}
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{CAVERN OF THE MYSTICAL STONE}
+This ante-chamber is
+the resting place for a large, glowing chunk of rock which
+appears to be mica. The stone radiates magic strongly.
+
+The stone rests permanently in its place and is not removable.
+Although chips can easily be broken off the rock by
+hand, only one chip at a time may be broken away; until
+anything is done with it, the rest of the rock will remain impervious
+to breaking.
+
+Once a chip is removed, its glow will begin to fade, and after
+three rounds (thirty seconds) it will be a normal piece of mica
+with no magical properties (as will be the case if it is removed
+from this room). The chip's magical properties are manifested
+only if it is consumed (or placed in the mouth) by any
+character before three rounds have passed after breaking
+off from the chunk. The magical effects are highly variable
+and each individual can only be once affected—even if a
+future return to the rock is made at a later time. If any character
+places a chip within his or her mouth, a 20-sided die is
+rolled to determine the effect according to the following table:
+
+\begin{enumerate}
+\item Immediately teleports the character and his gear to the
+webbed cave (room 42)
+\item Immediately blinds the character for 1--6 hours of game
+time (no combat, must be led by other adventurers)
+\item Raises strength rating permanently by 1 point
+\item Raises charisma rating permanently by 1 point
+\item Raises wisdom rating permanently by 1 point
+\item Raises intelligence rating permanently by 1 point
+\item Raises dexterity rating permanently by 1 point
+\item Lowers strength rating permanently by 1 point
+\item Lowers charisma rating permanently by \ point
+\item Lowers intelligence rating permanently by 1 point
+\item Cures all damage on one character
+\item Causes invisibility for 1--6 hours of game time (subject to
+normal restrictions)
+\item Poison (saving throw at +1)
+\item Makes a 500 g.p. gem (pearl) appear in character's
+hand
+\item Gives a permanent +1 to any single weapon carried by
+character (if more than one now carried, roll randomly to
+determine which)
+\item Heals all lost hit points of character (if any)
+\item Causes idiocy for 1--4 hours (unable to function intelligently
+or fight, must be led by other adventurers)
+\item Gives a special one-time bonus of 1--6 hit points to the
+character (these are the first ones lost the next time damage
+or injury is taken)
+\item Gives a curse: the character will sleep for 72 hours
+straight each month, beginning one day before and
+ending one day after each new moon (can only be removed
+by a remove curse spell)
+\item Has no effect
+\end{enumerate}
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{SUNKEN CAVERN}
+This small cavern lies at the bottom of
+a short, sloping corridor. The walls are wet with moisture, and
+glisten in any reflected light.
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{CAVERN}
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{ARENA CAVERN}
+This cavern, designed as a small theatre
+or arena, is unfinished. The center portion of the room is
+sunken about 15' below the floor level, and the sides slope
+downward from the surrounding walls to form a small amphitheatre.
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{PHOSPHORESCENT CAVE}
+This medium-sized cavern
+and its irregularly-shaped eastern arm present an eerie sight
+to explorers. A soft phosphorescent glow bathes the entire
+area independent of any other illumination, and the strange
+light is caused by the widespread growth (on walls, ceiling,
+and even parts of the floor) of a light purplish mold. The mold
+itself is harmless.
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{WATER PIT}
+This room contains the 8' deep pool of water
+into which any unwary adventurers are precipitated from the
+trap on the upper level (see the special description of the
+trap under the description of room 36). As described there,
+the water is extremely cold. Anyone entering the water
+(whether voluntarily or not) must spend a full hour recovering
+from its chilly effects.
+The pool is about 20' across and is filled by a cold spring.
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{SIDE CAVERN}
+This cavern is unusual only in that its eastern
+rock wall is striated with irregular diagonal streaks of a
+bluish ore (of no unusual use or value to the adventurers).
+
+Monster:
+
+Treasure \& Location:
+
+\subsection{RAISED CAVERN}
+This room, off the southeast corner of
+the grand cavern, is accessible by climbing four upward
+steps. Its eastern wall also shows diagonal streaks of the
+same bluish ore noticeable in room 51. The room has a low
+ceiling (only 5'), so some humans may find it difficult to stand
+fully erect.
+
+% Monster:
+%
+% Treasure \& Location:
+%
+% \subsection{GRAND CAVERN OF THE BATS}
+% This majestic cave is the
+% largest in the complex, and is impressive due to its size and
+% volume, for the ceiling is almost 60' above. A corridor sloping
+% downward into the cavern (noticeable even by nondwarves)
+% gives primary access to the room on its south wall.
+% A secondary entrance/exit is via a secret door to the west,
+% while steps to the southeast lead up to room 52.
+
+\end{document}
diff --git a/macros/latex/contrib/rpg-module/examples/b3.pdf b/macros/latex/contrib/rpg-module/examples/b3.pdf
new file mode 100644
index 0000000000..7f6c32e5ea
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/b3.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/examples/b3.tex b/macros/latex/contrib/rpg-module/examples/b3.tex
new file mode 100644
index 0000000000..261073c0a5
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/b3.tex
@@ -0,0 +1,240 @@
+\documentclass[letterpaper,serif,tightsqueeze]{rpg-module}
+
+\usepackage{parskip} % Add spacing between paras instead of indents
+
+\title{B3: Palace of the Silver Princess}
+
+% Compress title spacing compared to default
+
+\addtolength{\topmargin}{-0.3cm}
+\addtolength{\textheight}{0.7cm}
+
+% Initialise counters
+
+\setcounter{page}{21}
+\setcounter{part}{3}
+\setcounter{subsection}{44}
+
+\begin{document}
+
+\onecolumn
+
+\begin{center}
+Page intentionally left blank.
+\end{center}
+
+\twocolumn
+
+locusts are stone gray and may not be noticed until they move or
+until the party approaches within 20. They are very nervous and
+will flee most of the time rather than fight. They flee by jumping up
+to 60. Unfortunately, when they panic their only thought is to
+escape. There is a 50\% chance that they will try to flee by jumping
+right through the party. If they try to jump through the party,
+choose a character at random and roll to see if that character has
+been hit. If so, the character takes 1--4 points of damage from being
+battered. The locust then flies away.
+
+Cave locusts can also attack and bite for 1--2 points (but not when
+they are fleeing). When frightened or attacked, cave locusts make
+a loud shrieking noise to warn their fellows. This shriek has a 20\%
+chance per round of attracting wandering monsters to investigate.
+
+If cornered, a cave locust will spit a brown gooey substance up to
+10' at its attackers. To hit a character, the locust need only make
+an attack against armor class 9, no matter what type of armor the
+individual is wearing. A character hit by cave locust spittle must
+save vs. Poison or be unable to do anything for 1 turn due to the
+awful smell. After this time he or she will be used to the smell, but
+any character approaching within 5' of the victim must also save or
+be violently ill. This effect will last until the spittle is washed off.
+
+The blue glow of the stalactites and stalagmites is caused by a type
+of moss. The moss is harmless. It can be used as a weak light
+source, casting light up to 10'. If the players search the cave they
+will find a small silver statuette of a dragon readying for flight. The
+statuette is in a niche along the north wall. The statuette looks the
+same as the one found in room 33 (for more details see room 33).
+
+\includegraphics[width=\linewidth]{CaveLocust.png}
+
+\subsection{CAVE POOL}
+\begin{boxtext}
+A large pool of pitch black water fills the room. You see the glint
+of gold coming from the far side of the pool. A hot wind blows
+through the cave. Moisture fills the air and tiny beads of water
+form on clothing, skin, and hair. The floor is damp and slick.
+\end{boxtext}
+Once the characters have entered the cave they will be able to see
+the crowned head of a large statue of a man. The statue seems to
+be made of bronze. The eyes of the statue are small rubies (value
+50 gp each). The glint of gold comes from a crown on top of the
+statue's head. The crown appears to be made of gold. The statue
+really is bronze, but the crown is only gold paint.
+
+The liquid in the pool is a kind of ink. The water of the pool is heated
+by hot springs. The hot water absorbs color from a particular kind
+of mineral lining the pool. The result is a deep purple ink. Anything
+which comes in contact with the ink will be stained purple. Since
+the ink is permanent it will have to wear off naturally (1--6 days). It
+will not stain non-porous surfaces which do not absorb water very
+well (such as steel). The ink will not harm characters.
+
+Once the characters reach the statue they will find that the rubies
+can be pried out easily. If the party carefully examines the statue,
+there is a 50\% chance they will discover that the head of the statue
+can be unscrewed. Hidden inside the head, packed in a protective
+oilskin bag, is a \textbf{ring of protection +1}.
+\subsection{BLADE TRAP}
+At the corner of the corridor is a trap. When a character walks over
+a pressure plate in the floor the trap might be sprung. Roll ld6. The
+trap will be sprung on a roll of 1. Roll separately for each character
+that walks around the corner. If the trap is sprung, a weighted
+blade (like a guillotine blade) will fall from the ceiling causing 1--10
+points of damage to the person who sprung the trap. The blade is
+hidden in the ceiling.
+\subsection{TROGLODYTE ROOM}
+\begin{boxtext}
+In the center of the room you see three human-like reptiles with
+short tails, long legs, and a spiny ``comb'' on their heads and
+arms. They block the way out.
+\end{boxtext}
+The human-like reptiles are \stats{troglodyte}{3}{9 each}.
+Troglodytes are intelligent. They hate most other creatures and will try to kill
+anyone they meet. Hence they will attack on sight. Troglodytes
+have a chameleon-like power to blend into their surroundings
+(normally they surprise on 1--4 on ld6), but they are not using the
+ability at the moment. Troglodytes secrete an oil when fighting
+which smells so bad that characters will be nauseated unless they
+save vs. Poison. Nauseated characters have a penalty of \minus 2 on their
+``to hit'' rolls while in melee combat with the troglodytes.
+\subsection{WATCH ROOM}
+\begin{boxtext}
+This room is higher than the surrounding countryside so that
+guards could look out on the surrounding land when standing
+watch. There are windows in the west and south walls. You
+notice that the red glow still surrounds the palace. In the center
+of the room is an iron ladder. The ladder leads to a trap door in
+the ceiling. By the south wall you see a statue that looks like a
+cleric. He looks frightened and had apparently just finished
+scratching a message into the wall. The inscription reads:
+\begin{quote}
+Evil red eye, malefaction!\\
+Sweet music from strings;\\
+Priceless Blade of Destruction,\\
+Salvation rides on dragon's wings!
+\end{quote}
+\end{boxtext}
+The chief palace cleric had divined the evil intent of Arik when
+disaster struck. He hurriedly left the inscription\,---\,clues as to how
+to destroy the ruby\,---\,in the faint hope that it might help rescuers.
+
+This trap door is the only way the party can reach the second level
+of the dungeon. It is important that the party reach the second level
+and finish their mission, but it is also important that they encounter
+a number of monsters and traps before reaching the second level.
+If they reached the second level too easily the adventure would not
+be a challenge. On the other hand, since they must reach the
+second level, the DM might consider sending the vision of a Protector
+to the party if they cannot find the way to this trap door leading
+to the second level.
+
+\onecolumninline{\part{Second Dungeon Level}
+\textbf{Wandering Monsters}
+
+The second dungeon level has its own wandering monster table. Check for wandering monsters every other turn. Roll ld6: the party will
+encounter a wandering monster if a 1 is rolled. The wandering monster will be first seen 20--120 feet (2d6\x 10') away from the party when
+encountered, in any direction and doing anything the DM chooses. To determine exactly which monster is encountered, use the Wandering
+Monster Table: Level 2 below:
+\begin{center}
+\textbf{Wandering Monster Table: Level 2} (Roll ld6)
+\end{center}
+\begin{wanderingmonsters}
+\wanderitem{ghoul}{}
+\wanderitem{goblin}{}
+\wanderitem{harpy}{1--3}
+\wanderitem{hobgoblin}{}
+\wanderitem{medusa}{1}
+\wanderitem{zombie}{}
+\end{wanderingmonsters}
+
+It is suggested that the monsters Harpy and Medusa be encountered no more than once as wandering monsters. If the DM rolls a wandering
+monster encounter with a second Harpy or Medusa the DM should choose a wandering monster from the table for Level One instead. This is
+because both monsters are very difficult challenges. If encountered too many times, the encounters might upset the play balance.
+
+All the monsters on the second level wandering monster table appear in both editions of the D\&D\registered Basic rules. Only those monsters with
+unusual powers are described below.
+
+\textbf{Ghoul}\,---\,A successful attack by a ghoul will paralyze any creature of ogre-size or smaller, except elves, unless the victim saves vs. Paralysis.
+Elves are immune to the paralysis, but still take normal damage from a ghoul's attacks. Paralysis lasts for 2--8 turns.
+
+\textbf{Harpy}\,---\,Any character hearing the harpy's song must save vs. Spells or be charmed. Charmed individuals will move toward the harpy,
+resisting any attempt to stop them, but not otherwise attacking. If a character successfully saves the character will not be affected by the harpy
+song for that encounter. Harpies are resistant to magic and have a +2 on all their saves.
+
+\textbf{Medusa}\,---\,Looking at a medusa will turn a character to stone unless the victim saves vs. Turn to Stone. A medusa can also attack with her
+snaky hair. The bite of the snakes is poisonous (save vs. Poison or die in one turn) and when the snakes hit they cause 1-6 points of damage.
+Anyone who tries to attack a medusa without looking at it must subtract 4 from their ``to hit'' roll. A medusa is resistant to magic and gains +2 on
+saves vs. Spells only, other saving throws are normal.\vspace{-1ex}
+
+\hrulefill
+\begin{center}
+\textbf{Key to Dungeon Level Two}
+\end{center}}
+\subsection{WATCH TOWER}
+\begin{boxtext}
+This watch tower has 6 windows overlooking the surrounding
+lands. There is a trap door in the center of the floor. A stone
+statue of a guard stands looking out each window. Except for
+the statues the room looks empty.
+\end{boxtext}
+The room is empty except for the statues.
+\subsection{PASSAGEWAY}
+\begin{boxtext}
+As soon as you open the door, bright lights flood the hallway.
+You see three swords fighting each other, as if being held by
+invisible men.
+\end{boxtext}
+The fighting swords and bright light is.an illusion pIaced there by
+the palace magic-user to frighten intruders who might enter the
+palace through the tower. The illusion is triggered by the door
+opening without the password ``Argenta'' being spoken. If any
+character touches the illusion it will be dispelled.
+\subsection{LABORATORY}
+\begin{boxtext}
+You see a room filled with stuffed animals, shelves filled with
+books and scrolls, and jars of powders and herbs. Strange
+symbols* are painted on the walls. An iron statue of a warrior
+stands in the southeast corner of the room. A polishing cloth is
+draped over the warrior's shield.
+\end{boxtext}
+This room was the palace magic-user's laboratory. The iron statue
+is actually a \stats{living_iron_statue}{1}{18}.
+Living iron statues have bodies which can absorb iron and steel. When hit, they will take normal
+damage, but if a non-magical metal weapon is used, the attacker
+must save vs. Spells or the weapon will become stuck in the body of
+the living iron statue, and can only be removed if the statue is killed.
+\subsection{STOREROOM}
+\begin{boxtext}
+This small room appears to be empty.
+\end{boxtext}
+The room once held stores of various sorts but has recently been
+cleaned out.
+\subsection{MIRABILIS' ROOM}
+\begin{boxtext}
+A plain bed and a huge wooden desk dominate this sparsely
+furnished bedchamber. A broom lies in one corner near a pile of
+dirt. A tattered pair of silk bedroom slippers lie on the floor near
+the bed. A small nightstand has been overturned. While you
+watch, a small black kitten races out from under the bed, bats
+one of the slippers around, then runs back under the bed.
+\end{boxtext}
+\changealignment{panther}{Lawful}
+The room is the bedroom of the palace magic-user. The black
+kitten is his familiar and pet. Three times a day the kitten can
+transform itself into a \stats{panther}{1}{18}.
+The transformation lasts 10 rounds. When in kitten form the creature is harmless. Note that
+while panthers are usually neutral in alignment, the kitten/panther is lawful because this magical animal is the familiar of a
+lawful magic-user.
+
+\end{document}
diff --git a/macros/latex/contrib/rpg-module/examples/basic.pdf b/macros/latex/contrib/rpg-module/examples/basic.pdf
new file mode 100644
index 0000000000..2fb4a72445
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/basic.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/examples/basic.tex b/macros/latex/contrib/rpg-module/examples/basic.tex
new file mode 100644
index 0000000000..f3cf4a2de5
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/basic.tex
@@ -0,0 +1,234 @@
+\documentclass[letterpaper,serif,tightsqueeze]{rpg-module}
+
+\usepackage{parskip} % Add spacing between paras instead of indents
+\usepackage{enumitem} % Control spacing in description list
+
+\renewcommand{\newmonsterfont}{\bfseries} % Redefine new monster headings to use a smaller font
+\renewcommand{\newmonsterbottomskip}{0ex} % Reduce the space below New Monster sections
+
+\setcounter{page}{44} % Page and section numbers
+\setcounter{part}{6}
+
+\RequirePackage{fancyhdr} % Change page numbering style
+\fancypagestyle{plain}{%
+ \fancyhf{} % clear all header and footer fields
+ \fancyfoot[C]{B\thepage} % page numbering
+ \renewcommand{\headrulewidth}{0pt}
+ \renewcommand{\footrulewidth}{0pt}
+}
+\pagestyle{plain}
+
+% Redefine troglodyte/zombie so damage fits on one line
+
+\monster{troglodyte}{Troglodyte}{||5|2*|120'|40'||||3|2 claws\?1 bite|1d4\x 3|1d4 each|Fighter: 2|9|Chaotic|1--8|5--40|A|25}
+\monster{zombie}{Zombie}{||8|2|120'|40'||||1|1 weapon|1d8|1d8~or~weapon|Fighter: 1|12|Chaotic|2--8|4--24|Nil|20}
+
+% Redefine veteran to be more generic for New Monster block
+
+\monster{veteran}{Veteran}{||2|1--3|60'|20'||||1|1 weapon|1d8|1d8~or~weapon|Fighter: 1--3|9 (varies)|Any|2--8|2--12|V|10}
+
+% 3/4 symbol
+
+\newcommand{\threequarters}{{\usefont{T1}{lmr}{m}{n}\sfrac{3}{4}} }
+
+
+
+\begin{document}
+
+\onecolumn
+
+\begin{center}
+Page intentionally left blank
+\end{center}
+
+\twocolumn
+
+\begin{newmonster}{troglodyte}
+A troglodyte is an intelligent human-like reptile with a short tail,
+long legs, and a spiny ``comb'' on its head and arms. Troglodytes
+walk upright and use their hands as well as humans. They hate
+most other creatures, and will try to kill anyone they meet. They
+have a chameleon-like ability to change colors, and use it to hide
+by rock walls, surprising on a roll of 1--4 (on 1d6). They secrete an
+oil which produces a stench that will nauseate humans and demihumans
+unless the victims save vs. Poison. Nauseated characters
+will have a penalty of \minus 2 on their ``to hit'' rolls while in hand-to-hand
+combat with the troglodytes.
+
+\includegraphics[width=\linewidth]{troglodyte.png}
+\end{newmonster}
+\vspace{-3ex}\textbf{Undead:} (see \textbf{Ghoul}, \textbf{Skeleton}, \textbf{Wight} and \textbf{Zombie})
+
+Undead are evil creatures who have been created through dark
+magic. They are unaffected by things that affect living creatures,
+such as poison, and are not affected by spells which affect the
+mind, such as \textbf{sleep} and \textbf{charm person}. They do not make noise.
+
+\begin{newmonster}{veteran}
+Veterans are low-level fighters, usually returning from or going to a
+war. To determine each veteran's level and alignment, use the
+method outlined under \textbf{Creating an NPC Party} (page B52). A
+party of veterans may be of mixed levels and alignments, or the
+DM may wish to give all members the same levels.
+\end{newmonster}
+\textbf{Were-creature} (werebear, wearboar, wererat, weretiger, or werewolf); see \textbf{Lycanthropes}.\\[1ex]
+\begin{newmonster}{wight}
+A wight is an \textbf{undead} spirit living in the body of a dead human or
+demi-human. It can only be hit by silvered or magical weapons.
+Wights are greatly feared, as they drain life energy when striking a
+victim. Each hit drains one level of experience or hit die (life
+energy, see page B29). EXAMPLE: A 3rd level fighter struck by a
+wight becomes a 2nd level fighter, keeping only enough experience
+points to be at the midpoint of 2nd level, and losing 1 hit die
+of hit points. Any person totally drained of life energy by a wight
+will become a wight in 1--4 days, and will be under control of the
+wight who drained him or her.
+\end{newmonster}
+\begin{newmonster2}{wolf}{dire_wolf}
+\textbf{Wolves:} Wolves are meat-eaters and hunt in packs. Though
+wolves prefer the wilderness, they will occasionally be found in
+caves. Captured wolf cubs can be trained like dogs (if the DM permits),
+but it is difficult. If 3 wolves or less are encountered, or if a
+pack is reduced to less than 50\% of its original numbers, their
+morale score is 6 rather than 8.
+
+\textbf{Dire Wolves:} Dire wolves may be found in caves, woods, or
+mountains. They are larger and more ferocious than normal
+wolves, and are semi-intelligent. They are fierce enemies and
+usually hunt in packs. They are sometimes trained by goblins to be
+used as mounts. Captured dire wolf cubs can be trained like dogs
+(if the DM permits), but they are even more savage than normal
+wolves.
+\end{newmonster2}
+\begin{newmonster}{yellow_mold}
+This deadly fungus covers an area of 10 square feet (2' by 5', for
+example), though many are sometimes found together. Yellow
+mold can only be killed by fire; a torch will do 1--4 points of damage
+to it each round. It will eat through wood and leather but does not
+harm metal or stone. It does not actually attack, but if it is touched
+(by a torch, for. example) the touch may cause the mold to squirt
+out a 10'\x 10'\x 10' cloud of spores. There is a 50\% chance per hit
+that the mold will squirt out this cloud. Anyone caught within the
+cloud must save vs. Death Ray or choke to death within 6 rounds.
+\end{newmonster}
+\begin{newmonster}{zombie}
+Zombies are undead humans or demi-humans animated by some
+evil cleric or magic-user. As all undead, they may be ``Turned'' by
+a cleric but are not affected by sleep or charm spells or any form
+of mind reading. They are often placed to guard treasures, since
+they make no noise until they attack. Zombies will always attack on
+sight, but can be destroyed by normal weapons. They are slow
+fighters, and always strike last (no initiative roll needed).
+\end{newmonster}
+
+\begin{onecolumnfloat}[t]
+\part{Treasure}
+\end{onecolumnfloat}
+\begin{onecolumnfloat}[hb!]
+\begin{center}
+\textbf{TREASURE TYPES}
+\end{center}
+\vspace{1ex}
+\addtolength{\tabcolsep}{0.6mm}
+\begin{tabularx}{\linewidth}{clllll>{\raggedright\arraybackslash\hsize=1.9cm}X>{\raggedright\arraybackslash\hsize=4.5cm}X}
+% Need a bit of a hack to get table headers spanning 2 rows unfortunately
+& \multicolumn{1}{b}{1000's of} & \multicolumn{1}{b}{1000's of} & \multicolumn{1}{b}{1000's of} &
+ \multicolumn{1}{b}{1000's of} & \multicolumn{1}{b}{1000's of} & \multicolumn{1}{b}{*Gems and}\\[-0.7ex]
+\tableheader[b]{Type & Copper & Silver & Electrum & Gold & Platinum & Jewelry & Magic Items}
+A & 25\% 1--6 & 30\% 1--6 & 20\% 1--4 & 35\% 2--12 & 25\% 1--2 & 50\% 6--36 & 30\% Any 3\\
+B & 50\% 1--8 & 25\% 1--6 & 25\% 1--4 & 25\% 1--3 & Nil & 25\% 1--6 & 10\% 1 sword, armor, or weapon\\
+C & 20\% 1--12 & 30\% 1--4 & 10\% 1--4 & Nil & Nil & 25\% 1--4 & 10\% Any 2\\
+D & 10\% 1--8 & 15\% 1--12 & Nil & 60\% 1--6 & Nil & 30\% 1--8 & 15\% Any 2 + 1 potion\\
+E & 5\% 1--10 & 30\% 1--12 & 25\% 1--4 & 25\% 1--8 & Nil & 10\% 1--10 & 25\% Any 3 + 1 scroll\\
+F & Nil & 10\% 2--20 & 20\% 1--8 & 45\% 1--12 & 30\% 1--3 & 20\% 2--24\?10\%~1--12 & 30\% Any 3 except weapons + 1 potion + 1 scroll\\
+G & Nil & Nil & Nil & 50\% 10--40 & 50\% 1--6 & 25\% 3--18\?25\%~1--10 & 35\% Any 4 + 1 scroll\\
+H & 25\% 3--24 & 50\% 1--100 & 50\% 10--40 & 50\% 10--60 & 25\% 5--20 & 50\% 1--100\?50\%~10--40 & 15\% Any 4 + 1 potion + 1 scroll\\
+I & Nil & Nil & Nil & Nil & 30\% 1--8 & 50\% 2--12 & 15\% Any 1\\
+J & 25\% 1--4 & 10\% 1--3 & Nil & Nil & Nil & Nil & Nil\\
+K & Nil & 30\% 1--6 & 10\% 1--2 & Nil & Nil & Nil & Nil\\
+L & Nil & Nil & Nil & Nil & Nil & 50\% 1--4\?Nil & Nil\\
+M & Nil & Nil & Nil & 40\% 2--8 & 50\% 5--30 & 55\% 5--20\?45\%~2--12 & Nil\\
+N & Nil & Nil & Nil & Nil & Nil & Nil & 40\% 2--8 potions\\
+O & Nil & Nil & Nil & Nil & Nil & Nil & 50\% 1--4 scrolls\\
+\end{tabularx}
+% Can't have a footnote inside a float, here is a workaround
+\begin{enumerate}[leftmargin=5cm,rightmargin=5cm]
+\item[*] Roll twice, once for each category (Gems and Jewelry). The chances are the same unless two notations are made, in which case the order given is for ``Gems/Jewelry''.
+\end{enumerate}
+\end{onecolumnfloat}
+
+The coins, gems, jewelry and magic items that a party finds during
+an adventure is known as \textbf{treasure}. Wealth (coins, gems, jewelry
+and other items of value) is worth experience points to the player
+and allows the player to pay for better equipment, hire more retainers,
+and purchase special services (from higher level spell
+casters, for example). Magic items will usually give a character
+abilities not normally possessed and are useful on later adventures.
+Treasure is normally found in the lairs of monsters, but may be
+paid to a character by a high level NPC for performing a mission or
+job. Treasures are determined randomly or chosen by the DM. The
+DM should always determine the contents of a large treasure
+hoard before play in order to determine how best to hide and protect
+the treasure from theft, and if magic items are present, the DM
+may want to allow the monsters to use the items, such as a bugbear
+using a \textbf{sword\+1}.
+
+RANDOM TREASURES: To determine a monster's treasure at
+random, the DM uses the following step-by-step procedure:
+%\begin{description}[labelindent=1em,leftmargin=1em]
+\begin{enumerate}
+\item Find the Treasure Type in the monster description. Find the
+same letter on the Treasure Types table hereafter; that
+line will be used to find the actual treasure.
+\item Read across the Treasure Type line to find which types of
+treasure may be present. Each type will have a percentage
+and a range. If the DM rolls (on d\%) a number equal to or
+less than the percentage given, that type of treasure is
+present. The DM should roll for each percentage and
+make a note of what types are present.
+\item Roll dice (the type depends on the range given) to find the
+amount of each type of treasure (found in step 2, above) which is present.
+\item If any magic items are present, the magic item subtables (page B46)
+must be used to find the actual types.
+\end{enumerate}
+
+PLACED TREASURES: The DM may choose treasures instead of
+rolling for them randomly, or may choose a result if rolls give too
+much or too little treasure. The choices should be made carefully,
+since most of the experience the characters will get will be from
+treasure (usually \threequarters or more). It will often be easier for the DM to
+decide how much experience to give out (considering the size and
+levels of experience in the party) and place the treasures to give
+this result. However, the monsters should be tough enough to
+make sure that the characters earn their treasure!
+
+ADJUSTMENTS TO TREASURE: Treasures A through O are
+large, and generally only for use when large numbers or fairly difficult
+monsters are encountered. The lairs of most human-like
+monsters contain at least the number of creatures given as the
+wilderness ``No. Appearing'' (the number in parentheses). An encounter
+with less than a full lair should yield less treasure. On the
+other hand if 1--4 is the ``No. Appearing'', even one will have the
+normal amount of treasure, and no adjustment is necessary.
+
+The DM may create Treasure Types other than the ones listed.
+Some other valuable items could be rugs, wall hangings, rare
+wines, silverware and other kitchen items, or even animal skins.
+The DM should give each special item a value, in gold pieces (and,
+if the optional encumbrance rules are used, an encumbrance).
+
+To aid the DM, the average values (in gold pieces) of each treasure
+type are given below. These averages do not include the possible
+magic in the treasures. After rolling for treasures, the DM may refer
+to this list to see whether the treasure is larger or smaller than
+average and may then adjust the treasure as desired.
+
+\begin{tabular}{p{0.25cm} c r p{0.25cm} c r p{0.25cm} c r}
+& A & 17,000 & & F & 5,000 & & J & 25\\
+& B & 2,000 & & G & 25,000 & & K & 125\\
+& C & 1,000 & & H & 50,000 & & L & 250\\
+& D & 4,000 & & I & 8,000 & & M & 15,000\\
+& E & 2,500\\
+\end{tabular}
+
+\end{document}
diff --git a/macros/latex/contrib/rpg-module/examples/monster_manual.pdf b/macros/latex/contrib/rpg-module/examples/monster_manual.pdf
new file mode 100644
index 0000000000..71b7fd9695
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/monster_manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/examples/monster_manual.tex b/macros/latex/contrib/rpg-module/examples/monster_manual.tex
new file mode 100644
index 0000000000..af2d46c450
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/monster_manual.tex
@@ -0,0 +1,1115 @@
+%% monster_manual.tex
+%
+% Example file showing typesetting of all Basic statblocks for the Adventure Module class
+
+\documentclass[a4paper,serif]{rpg-module}
+
+\usepackage{lipsum}
+
+\begin{document}
+\raggedbottom
+
+\title{Monster Manual}
+
+\showtitle
+
+This document shows how to list all of the monsters from the Basic Stats style (\verb|basic-stats.sty|).
+Each monster is listed first in the ``New Monster'' format, then underneath as a statblock. In
+Part~\ref{wandering_monsters}, the monsters are listed again in tabular format.
+
+\part{Monsters from the Basic/Expert Rulebooks}
+
+\begin{newmonster}{ant}
+\lipsum[1]
+\end{newmonster}
+\statblock{ant}{3}{4 each}
+
+\begin{newmonster}{white_ape}\end{newmonster}
+\statblock{white_ape}{3}{4 each}
+
+\begin{newmonster}{basilisk}\end{newmonster}
+\statblock{basilisk}{3}{4 each}
+
+% Bat
+
+% Shorten the Vampire Bat name so it fits in the tabular format
+\pgfkeys{/vampire_bat/SingleName/.initial = {Vampire Bat}}
+
+\begin{newmonster3}{bat}{giant_bat}{vampire_bat}
+\lipsum[1]
+\end{newmonster3}
+% Restore the name to Giant Vampire Bat
+\pgfkeys{/vampire_bat/SingleName/.initial = {Giant Vampire Bat}}
+\statblock{bat}{3}{4 each}
+\statblock{giant_bat}{3}{4 each}
+\statblock{vampire_bat}{3}{4 each}
+
+% Bear
+
+\begin{newmonster2}{black_bear}{grizzly_bear}\end{newmonster2}
+\begin{newmonster2*}{polar_bear}{cave_bear}{}{}\lipsum[2]\end{newmonster2*}
+\statblock{black_bear}{3}{4 each}
+\statblock{grizzly_bear}{3}{4 each}
+\statblock{polar_bear}{3}{4 each}
+\statblock{cave_bear}{3}{4 each}
+
+\begin{newmonster}{bee}\end{newmonster}
+\statblock{bee}{3}{4 each}
+
+% Beetle
+
+\begin{newmonster3}{fire_beetle}{oil_beetle}{tiger_beetle}\lipsum[3]\end{newmonster3}
+\statblock{fire_beetle}{3}{4 each}
+\statblock{oil_beetle}{3}{4 each}
+\statblock{tiger_beetle}{3}{4 each}
+
+\begin{newmonster}{black_pudding}\end{newmonster}
+\statblock{black_pudding}{3}{4 each}
+
+\begin{newmonster}{blink_dog}\end{newmonster}
+\statblock{blink_dog}{3}{4 each}
+
+\begin{newmonster}{boar}\end{newmonster}
+\statblock{boar}{3}{4 each}
+
+\begin{newmonster}{bugbear}\end{newmonster}
+\statblock{bugbear}{3}{4 each}
+
+\begin{newmonster}{caecilia}\end{newmonster}
+\statblock{caecilia}{3}{4 each}
+
+\begin{newmonster}{camel}\end{newmonster}
+\statblock{camel}{3}{4 each}
+
+\begin{newmonster}{carrion_crawler}\end{newmonster}
+\statblock{carrion_crawler}{3}{4 each}
+
+% Great Cat
+
+\begin{newmonster3}{mountain_lion}{panther}{lion}\end{newmonster3}
+\begin{newmonster2*}{tiger}{sabre_tooth_tiger}{}{}\lipsum[4]\end{newmonster2*}
+\statblock{mountain_lion}{3}{4 each}
+\statblock{panther}{3}{4 each}
+\statblock{lion}{3}{4 each}
+\statblock{tiger}{3}{4 each}
+\statblock{sabre_tooth_tiger}{3}{4 each}
+
+\begin{newmonster}{cave_locust}\end{newmonster}
+\statblock{cave_locust}{3}{4 each}
+
+\begin{newmonster}{centaur}\end{newmonster}
+\statblock{centaur}{3}{4 each}
+
+\begin{newmonster}{centipede}\end{newmonster}
+\statblock{centipede}{3}{4 each}
+
+\begin{newmonster}{chimera}\end{newmonster}
+\statblock{chimera}{3}{4 each}
+
+\begin{newmonster}{cockatrice}\end{newmonster}
+\statblock{cockatrice}{3}{4 each}
+
+\begin{newmonster}{crab}\end{newmonster}
+\statblock{crab}{3}{4 each}
+
+% Crocodile
+
+\begin{newmonster3}{crocodile}{large_crocodile}{giant_crocodile}\end{newmonster3}
+\statblock{crocodile}{3}{4 each}
+\statblock{large_crocodile}{3}{4 each}
+\statblock{giant_crocodile}{3}{4 each}
+
+\begin{newmonster}{cyclops}\end{newmonster}
+\statblock{cyclops}{3}{4 each}
+
+% Dinosaur
+
+\begin{newmonster3}{stegosaurus}{triceratops}{tyrannosaurus_rex}\end{newmonster3}
+\statblock{stegosaurus}{3}{4 each}
+\statblock{triceratops}{3}{4 each}
+\statblock{tyrannosaurus_rex}{3}{4 each}
+
+\begin{newmonster}{displacer_beast}\end{newmonster}
+\statblock{displacer_beast}{3}{4 each}
+
+\begin{newmonster}{djinni}\end{newmonster}
+\statblock{djinni}{3}{4 each}
+
+\begin{newmonster}{doppleganger}\end{newmonster}
+\statblock{doppleganger}{3}{4 each}
+
+% Dragon
+
+\begin{newmonster}{white_dragon}\end{newmonster}
+\statblock{white_dragon}{3}{4 each}
+
+\begin{newmonster}{black_dragon}\end{newmonster}
+\statblock{black_dragon}{3}{4 each}
+
+\begin{newmonster}{green_dragon}\end{newmonster}
+\statblock{green_dragon}{3}{4 each}
+
+\begin{newmonster}{blue_dragon}\end{newmonster}
+\statblock{blue_dragon}{3}{4 each}
+
+\begin{newmonster}{red_dragon}\end{newmonster}
+\statblock{red_dragon}{3}{4 each}
+
+\begin{newmonster}{gold_dragon}\end{newmonster}
+\statblock{gold_dragon}{3}{4 each}
+
+\begin{newmonster}{dragon_turtle}\end{newmonster}
+\statblock{dragon_turtle}{3}{4 each}
+
+\begin{newmonster}{dryad}\end{newmonster}
+\statblock{dryad}{3}{4 each}
+
+\begin{newmonster}{dwarf}\end{newmonster}
+\statblock{dwarf}{3}{4 each}
+
+\begin{newmonster}{efreeti}\end{newmonster}
+\statblock{efreeti}{3}{4 each}
+
+% Elemental
+
+\begin{newmonster2}{air_elemental}{earth_elemental}\end{newmonster2}
+\begin{newmonster2*}{fire_elemental}{water_elemental}{}{}\end{newmonster2*}
+\statblock{lesser_air_elemental}{3}{4 each}
+\statblock{air_elemental}{3}{4 each}
+\statblock{greater_air_elemental}{3}{4 each}
+\statblock{lesser_earth_elemental}{3}{4 each}
+\statblock{earth_elemental}{3}{4 each}
+\statblock{greater_earth_elemental}{3}{4 each}
+\statblock{lesser_fire_elemental}{3}{4 each}
+\statblock{fire_elemental}{3}{4 each}
+\statblock{greater_fire_elemental}{3}{4 each}
+\statblock{lesser_water_elemental}{3}{4 each}
+\statblock{water_elemental}{3}{4 each}
+\statblock{greater_water_elemental}{3}{4 each}
+
+\begin{newmonster}{elephant}\end{newmonster}
+\statblock{elephant}{3}{4 each}
+
+\begin{newmonster}{elf}\end{newmonster}
+\statblock{elf}{3}{4 each}
+
+\begin{newmonster}{ferret}\end{newmonster}
+\statblock{ferret}{3}{4 each}
+
+% Giant Fish
+
+\begin{newmonster2}{piranha}{rockfish}\end{newmonster2}
+\begin{newmonster2*}{catfish}{sturgeon}{}{}\end{newmonster2*}
+\statblock{piranha}{3}{4 each}
+\statblock{rockfish}{3}{4 each}
+\statblock{catfish}{3}{4 each}
+\statblock{sturgeon}{3}{4 each}
+
+\begin{newmonster}{gargoyle}\end{newmonster}
+\statblock{gargoyle}{3}{4 each}
+
+\begin{newmonster}{gelatinous_cube}\end{newmonster}
+\statblock{gelatinous_cube}{3}{4 each}
+
+\begin{newmonster}{ghoul}\end{newmonster}
+\statblock{ghoul}{3}{4 each}
+
+% Giant
+
+\begin{newmonster3}{hill_giant}{stone_giant}{frost_giant}\end{newmonster3}
+\begin{newmonster3*}{fire_giant}{cloud_giant}{storm_giant}{}{}\end{newmonster3*}
+\statblock{hill_giant}{3}{4 each}
+\statblock{stone_giant}{3}{4 each}
+\statblock{frost_giant}{3}{4 each}
+\statblock{fire_giant}{3}{4 each}
+\statblock{cloud_giant}{3}{4 each}
+\statblock{storm_giant}{3}{4 each}
+
+\begin{newmonster}{gnoll}\end{newmonster}
+\statblock{gnoll}{3}{4 each}
+
+\begin{newmonster}{gnome}\end{newmonster}
+\statblock{gnome}{3}{4 each}
+
+\begin{newmonster}{goblin}\end{newmonster}
+\statblock{goblin}{3}{4 each}
+
+% Golem
+
+\begin{newmonster2}{wood_golem}{bone_golem}\end{newmonster2}
+\begin{newmonster2*}{amber_golem}{bronze_golem}{}{}\end{newmonster2*}
+\statblock{wood_golem}{3}{4 each}
+\statblock{bone_golem}{3}{4 each}
+\statblock{amber_golem}{3}{4 each}
+\statblock{bronze_golem}{3}{4 each}
+
+\begin{newmonster}{gorgon}\end{newmonster}
+\statblock{gorgon}{3}{4 each}
+
+\begin{newmonster}{gray_ooze}\end{newmonster}
+\statblock{gray_ooze}{3}{4 each}
+\statblock{grey_ooze}{3}{4 each}
+
+\begin{newmonster}{green_slime}\end{newmonster}
+\statblock{green_slime}{3}{4 each}
+
+\begin{newmonster}{griffon}\end{newmonster}
+\statblock{griffon}{3}{4 each}
+
+\begin{newmonster}{halfling}\end{newmonster}
+\statblock{halfling}{3}{4 each}
+
+\begin{newmonster}{harpy}\end{newmonster}
+\statblock{harpy}{3}{4 each}
+
+% Hawk
+
+\begin{newmonster2}{hawk}{hawk_giant}\end{newmonster2}
+\statblock{hawk}{3}{4 each}
+\statblock{hawk_giant}{3}{4 each}
+
+% Herd Animal
+
+\begin{newmonster3}{antelope}{goat}{deer}\end{newmonster3}
+\begin{newmonster2*}{caribou}{ox}{}{}\end{newmonster2*}
+\begin{newmonster2*}{elk}{moose}{}{}\end{newmonster2*}
+\statblock{antelope}{3}{4 each}
+\statblock{goat}{3}{4 each}
+\statblock{deer}{3}{4 each}
+\statblock{caribou}{3}{4 each}
+\statblock{ox}{3}{4 each}
+\statblock{elk}{3}{4 each}
+\statblock{moose}{3}{4 each}
+
+% Hellhound
+
+\begin{newmonster}{hellhound}\end{newmonster}
+\statblock{hellhound_3}{3}{4 each}
+\statblock{hellhound_4}{3}{4 each}
+\statblock{hellhound_5}{3}{4 each}
+\statblock{hellhound_6}{3}{4 each}
+\statblock{hellhound_7}{3}{4 each}
+
+\begin{newmonster}{hippogriff}\end{newmonster}
+\statblock{hippogriff}{3}{4 each}
+
+\begin{newmonster}{hobgoblin}\end{newmonster}
+\statblock{hobgoblin}{3}{4 each}
+
+% Horse
+
+\begin{newmonster3}{riding_horse}{war_horse}{draft_horse}\end{newmonster3}
+\statblock{riding_horse}{3}{4 each}
+\statblock{war_horse}{3}{4 each}
+\statblock{draft_horse}{3}{4 each}
+
+% Hydra
+
+\begin{newmonster}{hydra}\end{newmonster}
+\statblock{hydra_5}{3}{4 each}
+\statblock{hydra_6}{3}{4 each}
+\statblock{hydra_7}{3}{4 each}
+\statblock{hydra_8}{3}{4 each}
+\statblock{hydra_9}{3}{4 each}
+\statblock{hydra_10}{3}{4 each}
+\statblock{hydra_11}{3}{4 each}
+\statblock{hydra_12}{3}{4 each}
+
+% Insect Swarm
+
+\begin{newmonster}{insect_swarm}\end{newmonster}
+\statblock{insect_swarm_2}{3}{4 each}
+\statblock{insect_swarm_3}{3}{4 each}
+\statblock{insect_swarm_4}{3}{4 each}
+
+\begin{newmonster}{invisible_stalker}\end{newmonster}
+\statblock{invisible_stalker}{3}{4 each}
+
+\begin{newmonster}{kobold}\end{newmonster}
+\statblock{kobold}{3}{4 each}
+
+\begin{newmonster}{leech}\end{newmonster}
+\statblock{leech}{3}{4 each}
+
+% Living Statue
+
+\begin{newmonster3}{living_crystal_statue}{living_iron_statue}{living_rock_statue}\end{newmonster3}
+\statblock{living_crystal_statue}{3}{4 each}
+\statblock{living_iron_statue}{3}{4 each}
+\statblock{living_rock_statue}{3}{4 each}
+
+% Giant Lizard
+
+\begin{newmonster2}{gecko}{draco}\end{newmonster2}
+\begin{newmonster2*}{horned_chameleon}{tuatara}{}{}\end{newmonster2*}
+\statblock{gecko}{3}{4 each}
+\statblock{draco}{3}{4 each}
+\statblock{horned_chameleon}{3}{4 each}
+\statblock{tuatara}{3}{4 each}
+
+\begin{newmonster}{lizard_man}\end{newmonster}
+\statblock{lizard_man}{3}{4 each}
+
+% Lycanthrope
+
+\begin{newmonster3}{wererat}{werewolf}{wereboar}\end{newmonster3}
+\begin{newmonster3*}{weretiger}{werebear}{devil_swine}{}{}\end{newmonster3*}
+\statblock{wererat}{3}{4 each}
+\statblock{werewolf}{3}{4 each}
+\statblock{wereboar}{3}{4 each}
+\statblock{weretiger}{3}{4 each}
+\statblock{werebear}{3}{4 each}
+\statblock{devil_swine}{3}{4 each}
+
+\begin{newmonster}{manticore}\end{newmonster}
+\statblock{manticore}{3}{4 each}
+
+\begin{newmonster}{mastodon}\end{newmonster}
+\statblock{mastodon}{3}{4 each}
+
+\begin{newmonster}{medusa}\end{newmonster}
+\statblock{medusa}{3}{4 each}
+
+% Men
+
+\begin{newmonster3}{normal_human}{acolyte}{medium}\end{newmonster3}
+\begin{newmonster3*}{veteran}{berserker}{bandit}{}{}\end{newmonster3*}
+\begin{newmonster3*}{brigand}{buccaneer}{pirate}{}{}\end{newmonster3*}
+\begin{newmonster3*}{nomad}{dervish}{merchant}{}{}\end{newmonster3*}
+\begin{newmonster2*}{trader}{noble}{}{}\end{newmonster2*}
+\statblock{normal_human}{3}{4 each}
+\statblock{acolyte}{3}{4 each}
+\statblock{medium}{3}{4 each}
+\statblock{veteran_1}{3}{4 each}
+\statblock{veteran_2}{3}{4 each}
+\statblock{veteran_3}{3}{4 each}
+\statblock{berserker}{3}{4 each}
+\statblock{bandit}{3}{4 each}
+\statblock{brigand}{3}{4 each}
+\statblock{brigand_chain}{3}{4 each}
+\statblock{buccaneer}{3}{4 each}
+\statblock{buccaneer_chain}{3}{4 each}
+\statblock{pirate}{3}{4 each}
+\statblock{pirate_chain}{3}{4 each}
+\statblock{nomad}{3}{4 each}
+\statblock{nomad_chain}{3}{4 each}
+\statblock{dervish}{3}{4 each}
+\statblock{dervish_chain}{3}{4 each}
+\statblock{merchant}{3}{4 each}
+\statblock{trader}{3}{4 each}
+\statblock{noble}{3}{4 each}
+
+\begin{newmonster}{merman}\end{newmonster}
+\statblock{merman_1}{3}{4 each}
+\statblock{merman_2}{3}{4 each}
+\statblock{merman_3}{3}{4 each}
+\statblock{merman_4}{3}{4 each}
+
+\begin{newmonster}{minotaur}\end{newmonster}
+\statblock{minotaur}{3}{4 each}
+
+\begin{newmonster}{mule}\end{newmonster}
+\statblock{mule}{3}{4 each}
+
+\begin{newmonster}{mummy}\end{newmonster}
+\statblock{mummy}{3}{4 each}
+
+\begin{newmonster}{neanderthal}\end{newmonster}
+\statblock{neanderthal}{3}{4 each}
+
+\begin{newmonster}{nixie}\end{newmonster}
+\statblock{nixie}{3}{4 each}
+
+\begin{newmonster}{ochre_jelly}\end{newmonster}
+\statblock{ochre_jelly}{3}{4 each}
+
+\begin{newmonster}{octopus}\end{newmonster}
+\statblock{octopus}{3}{4 each}
+
+\begin{newmonster}{ogre}\end{newmonster}
+\statblock{ogre}{3}{4 each}
+
+\begin{newmonster}{orc}\end{newmonster}
+\statblock{orc}{3}{4 each}
+
+\begin{newmonster}{owl_bear}\end{newmonster}
+\statblock{owl_bear}{3}{4 each}
+
+\begin{newmonster}{pegasus}\end{newmonster}
+\statblock{pegasus}{3}{4 each}
+
+\begin{newmonster}{pixie}\end{newmonster}
+\statblock{pixie}{3}{4 each}
+
+% Pterodactyl
+
+\begin{newmonster2}{pterodactyl}{pteranodon}\end{newmonster2}
+\statblock{pterodactyl}{3}{4 each}
+\statblock{pteranodon}{3}{4 each}
+
+\begin{newmonster}{purple_worm}\end{newmonster}
+\statblock{purple_worm}{3}{4 each}
+
+% Rat
+
+\begin{newmonster2}{rat}{giant_rat}
+\lipsum[1]
+\end{newmonster2}
+\statblock{rat}{3}{4 each}
+\statblock{giant_rat}{3}{4 each}
+
+\begin{newmonster}{rhagodessa}\end{newmonster}
+\statblock{rhagodessa}{3}{4 each}
+
+% Rhinoceros
+
+\begin{newmonster2}{rhinoceros}{wooly_rhinoceros}\end{newmonster2}
+\statblock{rhinoceros}{3}{4 each}
+\statblock{wooly_rhinoceros}{3}{4 each}
+
+\begin{newmonster}{robber_fly}\end{newmonster}
+\statblock{robber_fly}{3}{4 each}
+
+% Roc
+
+\begin{newmonster3}{small_roc}{large_roc}{giant_roc}\end{newmonster3}
+\statblock{small_roc}{3}{4 each}
+\statblock{large_roc}{3}{4 each}
+\statblock{giant_roc}{3}{4 each}
+
+\begin{newmonster}{rock_baboon}\end{newmonster}
+\statblock{rock_baboon}{3}{4 each}
+
+\begin{newmonster}{rust_monster}\end{newmonster}
+\statblock{rust_monster}{3}{4 each}
+
+% Salamander
+
+\begin{newmonster2}{flame_salamander}{frost_salamander}\end{newmonster2}
+\statblock{flame_salamander}{3}{4 each}
+\statblock{frost_salamander}{3}{4 each}
+
+\begin{newmonster}{scorpion}\end{newmonster}
+\statblock{scorpion}{3}{4 each}
+
+\begin{newmonster}{sea_dragon}\end{newmonster}
+\statblock{sea_dragon_5}{3}{4 each}
+\statblock{sea_dragon_6}{3}{4 each}
+\statblock{sea_dragon_7}{3}{4 each}
+\statblock{sea_dragon_8}{3}{4 each}
+\statblock{sea_dragon_9}{3}{4 each}
+\statblock{sea_dragon_10}{3}{4 each}
+\statblock{sea_dragon_11}{3}{4 each}
+
+\begin{newmonster}{sea_serpent}\end{newmonster}
+\statblock{sea_serpent}{3}{4 each}
+
+\begin{newmonster}{shadow}\end{newmonster}
+\statblock{shadow}{3}{4 each}
+
+% Shark
+
+\begin{newmonster3}{bull_shark}{mako_shark}{great_white_shark}\end{newmonster3}
+\statblock{bull_shark}{3}{4 each}
+\statblock{mako_shark}{3}{4 each}
+\statblock{great_white_shark}{3}{4 each}
+
+\begin{newmonster}{shrew}\end{newmonster}
+\statblock{shrew}{3}{4 each}
+
+\begin{newmonster}{shrieker}\end{newmonster}
+\statblock{shrieker}{3}{4 each}
+
+\begin{newmonster}{skeleton}\end{newmonster}
+\statblock{skeleton}{3}{4 each}
+
+% Snake
+
+\begin{newmonster3}{spitting_cobra}{pit_viper}{sea_snake}\end{newmonster3}
+\begin{newmonster2*}{rattlesnake}{rock_python}{}{}\end{newmonster2*}
+\statblock{spitting_cobra}{3}{4 each}
+\statblock{pit_viper}{3}{4 each}
+\statblock{sea_snake}{3}{4 each}
+\statblock{rattlesnake}{3}{4 each}
+\statblock{rock_python}{3}{4 each}
+
+\begin{newmonster}{spectre}\end{newmonster}
+\statblock{spectre}{3}{4 each}
+
+% Spider
+
+\begin{newmonster3}{crab_spider}{black_widow}{tarantella}\end{newmonster3}
+\statblock{crab_spider}{3}{4 each}
+\statblock{black_widow}{3}{4 each}
+\statblock{tarantella}{3}{4 each}
+
+\begin{newmonster}{sprite}\end{newmonster}
+\statblock{sprite}{3}{4 each}
+
+\begin{newmonster}{squid}\end{newmonster}
+\statblock{squid}{3}{4 each}
+
+\begin{newmonster}{stirge}\end{newmonster}
+\statblock{stirge}{3}{4 each}
+
+% Termite
+
+\begin{newmonster3}{swamp_termite}{freshwater_termite}{sea_termite}\end{newmonster3}
+\statblock{swamp_termite}{3}{4 each}
+\statblock{freshwater_termite}{3}{4 each}
+\statblock{sea_termite}{3}{4 each}
+
+\begin{newmonster}{thoul}\end{newmonster}
+\statblock{thoul}{3}{4 each}
+
+\begin{newmonster}{titanothere}\end{newmonster}
+\statblock{titanothere}{3}{4 each}
+
+\begin{newmonster}{toad}\end{newmonster}
+\statblock{toad}{3}{4 each}
+
+\begin{newmonster}{treant}\end{newmonster}
+\statblock{treant}{3}{4 each}
+
+\begin{newmonster}{troglodyte}\end{newmonster}
+\statblock{troglodyte}{3}{4 each}
+
+\begin{newmonster}{troll}\end{newmonster}
+\statblock{troll}{3}{4 each}
+
+\begin{newmonster}{unicorn}\end{newmonster}
+\statblock{unicorn}{3}{4 each}
+
+\begin{newmonster}{vampire}\end{newmonster}
+\statblock{vampire_7}{3}{4 each}
+\statblock{vampire_8}{3}{4 each}
+\statblock{vampire_9}{3}{4 each}
+
+\begin{newmonster}{weasel}\end{newmonster}
+\statblock{weasel}{3}{4 each}
+
+% Whale
+
+\begin{newmonster3}{killer_whale}{narwhal}{sperm_whale}\end{newmonster3}
+\statblock{killer_whale}{3}{4 each}
+\statblock{narwhal}{3}{4 each}
+\statblock{sperm_whale}{3}{4 each}
+
+\begin{newmonster}{wight}\end{newmonster}
+\statblock{wight}{3}{4 each}
+
+% Wolf
+
+\begin{newmonster2}{wolf}{dire_wolf}\end{newmonster2}
+\statblock{wolf}{3}{4 each}
+\statblock{dire_wolf}{3}{4 each}
+
+\begin{newmonster}{wraith}\end{newmonster}
+\statblock{wraith}{3}{4 each}
+
+\begin{newmonster}{wyvern}\end{newmonster}
+\statblock{wyvern}{3}{4 each}
+
+\begin{newmonster}{yellow_mold}\end{newmonster}
+\statblock{yellow_mold}{3}{4 each}
+\statblock{yellow_mould}{3}{4 each}
+
+\begin{newmonster}{zombie}\end{newmonster}
+\statblock{zombie}{3}{4 each}
+
+\part{Monsters from B3: Palace of the Silver Princess}
+
+\begin{newmonster}{archer_bush_orange}
+This is the Archer Bush from the 1st edition of B3, with the orange cover.
+\end{newmonster}
+\statblock{archer_bush_orange}{3}{4 each}
+\begin{newmonster}{archer_bush}
+This is the Archer Bush from the 2nd edition of B3, with the green cover.
+\end{newmonster}
+\statblock{archer_bush}{3}{4 each}
+\begin{newmonster}{baric}\end{newmonster}
+\statblock{baric}{3}{4 each}
+\begin{newmonster}{bubble}\end{newmonster}
+\statblock{bubble}{3}{4 each}
+\begin{newmonster}{decapus_orange}
+This is the Decapus from the 1st (orange) edition of B3.
+\end{newmonster}
+\statblock{decapus_orange}{3}{4 each}
+\begin{newmonster}{decapus}
+This is the Decapus from the 2nd (green) edition of B3.
+\end{newmonster}
+\statblock{decapus}{3}{4 each}
+\begin{newmonster}{diger}\end{newmonster}
+\statblock{diger}{3}{4 each}
+\begin{newmonster}{ghost}\end{newmonster}
+\statblock{ghost}{3}{4 each}
+\begin{newmonster}{marble_snake}\end{newmonster}
+\statblock{marble_snake}{3}{4 each}
+\begin{newmonster}{jupiter_blood_sucker}
+The Jupiter Blood Sucker appeared in the 1st edition of B3, and was replaced by the Vampire Rose in the 2nd edition.
+\end{newmonster}
+\statblock{jupiter_blood_sucker}{3}{4 each}
+\begin{newmonster}{marmoset}\end{newmonster}
+\statblock{marmoset}{3}{4 each}
+\begin{newmonster}{protector}\end{newmonster}
+\statblock{protector}{3}{4 each}
+\begin{newmonster}{purple_moss}\end{newmonster}
+\statblock{purple_moss}{3}{4 each}
+\begin{newmonster}{ubue}\end{newmonster}
+\statblock{ubue}{3}{4 each}
+\begin{newmonster}{vampire_rose}
+Appeared in the 2nd edition of B3 and also in X2 (Castle Amber). Supplanted the Jupiter Blood Sucker from the 1st edition of B3.
+\end{newmonster}
+\statblock{vampire_rose}{3}{4 each}
+
+\part{Monsters from B4: The Lost City}
+
+\begin{newmonster}{banshee}\end{newmonster}
+\statblock{banshee}{3}{4 each}
+\begin{newmonster}{cynidicean}\end{newmonster}
+\statblock{cynidicean}{3}{4 each}
+\begin{newmonster}{werefox}\end{newmonster}
+\statblock{werefox}{3}{4 each}
+\begin{newmonster}{polymar}\end{newmonster}
+\statblock{polymar}{3}{4 each}
+\begin{newmonster}{zargon}\end{newmonster}
+\statblock{zargon}{1}{80}
+
+\part{Monsters from X1: Isle of Dread}
+
+\begin{newmonster3}{allosaurus}{ankylosaurus}{brontosaurus}\end{newmonster3}
+\begin{newmonster3*}{dimetrodon}{plesiosaurus}{trachodon}{}{}\end{newmonster3*}
+\statblock{allosaurus}{3}{4 each}
+\statblock{ankylosaurus}{3}{4 each}
+\statblock{brontosaurus}{3}{4 each}
+\statblock{dimetrodon}{3}{4 each}
+\statblock{plesiosaurus}{3}{4 each}
+\statblock{trachodon}{3}{4 each}
+
+\begin{newmonster}{aranea}
+Appeared in X1 and also in X2 (Castle Amber).
+\end{newmonster}
+\statblock{aranea}{3}{4 each}
+\begin{newmonster}{giant_elk}\end{newmonster}
+\statblock{giant_elk}{3}{4 each}
+\begin{newmonster}{grangeri}\end{newmonster}
+\statblock{grangeri}{3}{4 each}
+\begin{newmonster}{kopru}\end{newmonster}
+\statblock{kopru}{3}{4 each}
+\begin{newmonster}{megatherium}\end{newmonster}
+\statblock{megatherium}{3}{4 each}
+\begin{newmonster}{native}\end{newmonster}
+\statblock{native}{3}{4 each}
+\begin{newmonster}{oyster}\end{newmonster}
+\statblock{oyster}{3}{4 each}
+\begin{newmonster}{phanaton}\end{newmonster}
+\statblock{phanaton}{3}{4 each}
+\begin{newmonster}{phororhacos}\end{newmonster}
+\statblock{phororhacos}{3}{4 each}
+\begin{newmonster}{rakasta}
+Appeared in X1 and also in X2 (Castle Amber).
+\end{newmonster}
+\statblock{rakasta}{3}{4 each}
+
+\part{Monsters from X2: Castle Amber}
+
+\begin{newmonster}{amber_lotus_flower}\end{newmonster}
+\statblock{amber_lotus_flower}{3}{4 each}
+
+\begin{newmonster}{amoeba}\end{newmonster}
+\statblock{amoeba_10}{3}{4 each}
+\statblock{amoeba_11}{3}{4 each}
+\statblock{amoeba_12}{3}{4 each}
+\statblock{amoeba_13}{3}{4 each}
+\statblock{amoeba_14}{3}{4 each}
+\statblock{amoeba_15}{3}{4 each}
+
+\begin{newmonster}{brain_collector}\end{newmonster}
+\statblock{brain_collector}{3}{4 each}
+\begin{newmonster}{death_demon}\end{newmonster}
+\statblock{death_demon}{3}{4 each}
+\begin{newmonster}{mud_golem}\end{newmonster}
+\statblock{mud_golem}{3}{4 each}
+\begin{newmonster}{grab_grass}\end{newmonster}
+\statblock{grab_grass}{3}{4 each}
+\begin{newmonster}{gremlin}\end{newmonster}
+\statblock{gremlin}{3}{4 each}
+\begin{newmonster}{killer_tree}\end{newmonster}
+\statblock{killer_tree}{3}{4 each}
+\begin{newmonster}{lupin}\end{newmonster}
+\statblock{lupin}{3}{4 each}
+
+\begin{newmonster2}{hypnos_magen}{demos_magen}\end{newmonster2}
+\begin{newmonster2*}{caldron_magen}{galvan_magen}{}{}\end{newmonster2*}
+\statblock{hypnos_magen}{3}{4 each}
+\statblock{demos_magen}{3}{4 each}
+\statblock{caldron_magen}{3}{4 each}
+\statblock{galvan_magen}{3}{4 each}
+
+\begin{newmonster}{pagan}\end{newmonster}
+\statblock{pagan}{3}{4 each}
+\begin{newmonster}{phantom}\end{newmonster}
+\statblock{phantom}{3}{4 each}
+\begin{newmonster}{slime_worm}\end{newmonster}
+\statblock{slime_worm}{3}{4 each}
+
+\begin{newmonster}{sun_brother}\end{newmonster}
+\statblock{sun_brother_10}{3}{4 each}
+\statblock{sun_brother_11}{3}{4 each}
+\statblock{sun_brother_12}{3}{4 each}
+\statblock{sun_brother_13}{3}{4 each}
+\statblock{sun_brother_14}{3}{4 each}
+
+\onecolumn
+
+\part{Monsters Listed in Tabular Form}
+\label{wandering_monsters}
+\begin{wanderingmonsters}
+\wanderitem{acolyte}{}
+\wanderitem{air_elemental}{}
+\wanderitem{allosaurus}{}
+\wanderitem{amber_golem}{}
+\wanderitem{amber_lotus_flower}{}
+\wanderitem{amoeba_10}{}
+\wanderitem{amoeba_11}{}
+\wanderitem{amoeba_12}{}
+\wanderitem{amoeba_13}{}
+\wanderitem{amoeba_14}{}
+\wanderitem{amoeba_15}{}
+\wanderitem{ankylosaurus}{}
+\wanderitem{ant}{}
+\wanderitem{antelope}{}
+\wanderitem{aranea}{}
+\wanderitem{archer_bush}{}
+\wanderitem{archer_bush_orange}{}
+\wanderitem{bandit}{}
+\wanderitem{banshee}{}
+\wanderitem{baric}{}
+\wanderitem{basilisk}{}
+\wanderitem{bat}{}
+\wanderitem{bee}{}
+\wanderitem{berserker}{}
+\wanderitem{black_bear}{}
+\wanderitem{black_dragon}{}
+\wanderitem{black_pudding}{}
+\wanderitem{black_widow}{}
+\wanderitem{blink_dog}{}
+\wanderitem{blue_dragon}{}
+\wanderitem{boar}{}
+\wanderitem{bone_golem}{}
+\wanderitem{brain_collector}{}
+\wanderitem{brigand}{}
+\wanderitem{brigand_chain}{}
+\wanderitem{brontosaurus}{}
+\wanderitem{bronze_golem}{}
+\wanderitem{bubble}{}
+\wanderitem{buccaneer}{}
+\wanderitem{buccaneer_chain}{}
+\wanderitem{bugbear}{}
+\wanderitem{bull_shark}{}
+\wanderitem{caecilia}{}
+\wanderitem{caldron_magen}{}
+\wanderitem{camel}{}
+\wanderitem{caribou}{}
+\wanderitem{carrion_crawler}{}
+\wanderitem{catfish}{}
+\wanderitem{cave_bear}{}
+\end{wanderingmonsters}
+\begin{wanderingmonsters}
+\wanderitem[50]{cave_locust}{}
+\wanderitem{centaur}{}
+\wanderitem{centipede}{}
+\wanderitem{chimera}{}
+\wanderitem{cloud_giant}{}
+\wanderitem{cockatrice}{}
+\wanderitem{crab}{}
+\wanderitem{crab_spider}{}
+\wanderitem{crocodile}{}
+\wanderitem{cyclops}{}
+\wanderitem{cynidicean}{}
+\wanderitem{death_demon}{}
+\wanderitem{decapus}{}
+\wanderitem{decapus_orange}{}
+\wanderitem{deer}{}
+\wanderitem{demos_magen}{}
+\wanderitem{dervish}{}
+\wanderitem{dervish_chain}{}
+\wanderitem{devil_swine}{}
+\wanderitem{diger}{}
+\wanderitem{dimetrodon}{}
+\wanderitem{dire_wolf}{}
+\wanderitem{displacer_beast}{}
+\wanderitem{djinni}{}
+\wanderitem{doppleganger}{}
+\wanderitem{draco}{}
+\wanderitem{draft_horse}{}
+\wanderitem{dragon_turtle}{}
+\wanderitem{dryad}{}
+\wanderitem{dwarf}{}
+\wanderitem{earth_elemental}{}
+\wanderitem{efreeti}{}
+\wanderitem{elephant}{}
+\wanderitem{elf}{}
+\wanderitem{elk}{}
+\wanderitem{ferret}{}
+\wanderitem{fire_beetle}{}
+\wanderitem{fire_elemental}{}
+\wanderitem{fire_giant}{}
+\wanderitem{flame_salamander}{}
+\wanderitem{freshwater_termite}{}
+\wanderitem{frost_giant}{}
+\wanderitem{frost_salamander}{}
+\wanderitem{galvan_magen}{}
+\wanderitem{gargoyle}{}
+\wanderitem{gecko}{}
+\wanderitem{gelatinous_cube}{}
+\wanderitem{ghost}{}
+\wanderitem{ghoul}{}
+\wanderitem{giant_bat}{}
+\wanderitem{giant_crocodile}{}
+\wanderitem{giant_elk}{}
+\wanderitem{giant_rat}{}
+\wanderitem{giant_roc}{}
+\end{wanderingmonsters}
+\begin{wanderingmonsters}
+\wanderitem[104]{gnoll}{}
+\wanderitem{gnome}{}
+\wanderitem{goat}{}
+\wanderitem{goblin}{}
+\wanderitem{gold_dragon}{}
+\wanderitem{gorgon}{}
+\wanderitem{grab_grass}{}
+\wanderitem{grangeri}{}
+\wanderitem{gray_ooze}{}
+\wanderitem{greater_air_elemental}{}
+\wanderitem{greater_earth_elemental}{}
+\wanderitem{greater_fire_elemental}{}
+\wanderitem{greater_water_elemental}{}
+\wanderitem{great_white_shark}{}
+\wanderitem{green_dragon}{}
+\wanderitem{green_slime}{}
+\wanderitem{gremlin}{}
+\wanderitem{grey_ooze}{}
+\wanderitem{griffon}{}
+\wanderitem{grizzly_bear}{}
+\wanderitem{halfling}{}
+\wanderitem{harpy}{}
+\wanderitem{hawk}{}
+\wanderitem{hawk_giant}{}
+\wanderitem{hellhound_3}{}
+\wanderitem{hellhound_4}{}
+\wanderitem{hellhound_5}{}
+\wanderitem{hellhound_6}{}
+\wanderitem{hellhound_7}{}
+\wanderitem{hill_giant}{}
+\wanderitem{hippogriff}{}
+\wanderitem{hobgoblin}{}
+\wanderitem{horned_chameleon}{}
+\wanderitem{hydra_10}{}
+\wanderitem{hydra_11}{}
+\wanderitem{hydra_12}{}
+\wanderitem{hydra_5}{}
+\wanderitem{hydra_6}{}
+\wanderitem{hydra_7}{}
+\wanderitem{hydra_8}{}
+\wanderitem{hydra_9}{}
+\wanderitem{hypnos_magen}{}
+\wanderitem{insect_swarm_2}{}
+\wanderitem{insect_swarm_3}{}
+\wanderitem{insect_swarm_4}{}
+\wanderitem{invisible_stalker}{}
+\wanderitem{jupiter_blood_sucker}{}
+\wanderitem{killer_tree}{}
+\wanderitem{killer_whale}{}
+\wanderitem{kobold}{}
+\wanderitem{kopru}{}
+\wanderitem{large_crocodile}{}
+\wanderitem{large_roc}{}
+\wanderitem{leech}{}
+\end{wanderingmonsters}
+\begin{wanderingmonsters}
+\wanderitem[158]{lesser_air_elemental}{}
+\wanderitem{lesser_earth_elemental}{}
+\wanderitem{lesser_fire_elemental}{}
+\wanderitem{lesser_water_elemental}{}
+\wanderitem{lion}{}
+\wanderitem{living_crystal_statue}{}
+\wanderitem{living_iron_statue}{}
+\wanderitem{living_rock_statue}{}
+\wanderitem{lizard_man}{}
+\wanderitem{lupin}{}
+\wanderitem{mako_shark}{}
+\wanderitem{manticore}{}
+\wanderitem{marble_snake}{}
+\wanderitem{marmoset}{}
+\wanderitem{mastodon}{}
+\wanderitem{medium}{}
+\wanderitem{medusa}{}
+\wanderitem{megatherium}{}
+\wanderitem{merchant}{}
+\wanderitem{merman_1}{}
+\wanderitem{merman_2}{}
+\wanderitem{merman_3}{}
+\wanderitem{merman_4}{}
+\wanderitem{minotaur}{}
+\wanderitem{moose}{}
+\wanderitem{mountain_lion}{}
+\wanderitem{mud_golem}{}
+\wanderitem{mule}{}
+\wanderitem{mummy}{}
+\wanderitem{narwhal}{}
+\wanderitem{native}{}
+\wanderitem{neanderthal}{}
+\wanderitem{nixie}{}
+\wanderitem{noble}{}
+\wanderitem{nomad}{}
+\wanderitem{nomad_chain}{}
+\wanderitem{normal_human}{}
+\wanderitem{ochre_jelly}{}
+\wanderitem{octopus}{}
+\wanderitem{ogre}{}
+\wanderitem{oil_beetle}{}
+\wanderitem{orc}{}
+\wanderitem{owl_bear}{}
+\wanderitem{ox}{}
+\wanderitem{oyster}{}
+\wanderitem{pagan}{}
+\wanderitem{panther}{}
+\wanderitem{pegasus}{}
+\wanderitem{phanaton}{}
+\wanderitem{phantom}{}
+\wanderitem{phororhacos}{}
+\wanderitem{piranha}{}
+\wanderitem{pirate}{}
+\wanderitem{pirate_chain}{}
+\end{wanderingmonsters}
+\begin{wanderingmonsters}
+\wanderitem[212]{pit_viper}{}
+\wanderitem{pixie}{}
+\wanderitem{plesiosaurus}{}
+\wanderitem{polar_bear}{}
+\wanderitem{polymar}{}
+\wanderitem{protector}{}
+\wanderitem{pteranodon}{}
+\wanderitem{pterodactyl}{}
+\wanderitem{purple_moss}{}
+\wanderitem{purple_worm}{}
+\wanderitem{rakasta}{}
+\wanderitem{rat}{}
+\wanderitem{rattlesnake}{}
+\wanderitem{red_dragon}{}
+\wanderitem{rhagodessa}{}
+\wanderitem{rhinoceros}{}
+\wanderitem{riding_horse}{}
+\wanderitem{robber_fly}{}
+\wanderitem{rock_baboon}{}
+\wanderitem{rockfish}{}
+\wanderitem{rock_python}{}
+\wanderitem{rust_monster}{}
+\wanderitem{sabre_tooth_tiger}{}
+\wanderitem{scorpion}{}
+\wanderitem{sea_dragon_10}{}
+\wanderitem{sea_dragon_11}{}
+\wanderitem{sea_dragon_5}{}
+\wanderitem{sea_dragon_6}{}
+\wanderitem{sea_dragon_7}{}
+\wanderitem{sea_dragon_8}{}
+\wanderitem{sea_dragon_9}{}
+\wanderitem{sea_serpent}{}
+\wanderitem{sea_snake}{}
+\wanderitem{sea_termite}{}
+\wanderitem{shadow}{}
+\wanderitem{shrew}{}
+\wanderitem{shrieker}{}
+\wanderitem{skeleton}{}
+\wanderitem{slime_worm}{}
+\wanderitem{small_roc}{}
+\wanderitem{spectre}{}
+\wanderitem{sperm_whale}{}
+\wanderitem{spitting_cobra}{}
+\wanderitem{sprite}{}
+\wanderitem{squid}{}
+\wanderitem{stegosaurus}{}
+\wanderitem{stirge}{}
+\wanderitem{stone_giant}{}
+\wanderitem{storm_giant}{}
+\wanderitem{sturgeon}{}
+\wanderitem{sun_brother_10}{}
+\wanderitem{sun_brother_11}{}
+\wanderitem{sun_brother_12}{}
+\wanderitem{sun_brother_13}{}
+\end{wanderingmonsters}
+\begin{wanderingmonsters}
+\wanderitem[266]{sun_brother_14}{}
+\wanderitem{swamp_termite}{}
+\wanderitem{tarantella}{}
+\wanderitem{thoul}{}
+\wanderitem{tiger}{}
+\wanderitem{tiger_beetle}{}
+\wanderitem{titanothere}{}
+\wanderitem{toad}{}
+\wanderitem{trachodon}{}
+\wanderitem{trader}{}
+\wanderitem{treant}{}
+\wanderitem{triceratops}{}
+\wanderitem{troglodyte}{}
+\wanderitem{troll}{}
+\wanderitem{tuatara}{}
+\wanderitem{tyrannosaurus_rex}{}
+\wanderitem{ubue}{}
+\wanderitem{unicorn}{}
+\wanderitem{vampire_7}{}
+\wanderitem{vampire_8}{}
+\wanderitem{vampire_9}{}
+\wanderitem{vampire_bat}{}
+\wanderitem{vampire_rose}{}
+\wanderitem{veteran_1}{}
+\wanderitem{veteran_2}{}
+\wanderitem{veteran_3}{}
+\wanderitem{war_horse}{}
+\wanderitem{water_elemental}{}
+\wanderitem{weasel}{}
+\wanderitem{werebear}{}
+\wanderitem{wereboar}{}
+\wanderitem{werefox}{}
+\wanderitem{wererat}{}
+\wanderitem{weretiger}{}
+\wanderitem{werewolf}{}
+\wanderitem{white_ape}{}
+\wanderitem{white_dragon}{}
+\wanderitem{wight}{}
+\wanderitem{wolf}{}
+\wanderitem{wood_golem}{}
+\wanderitem{wooly_rhinoceros}{}
+\wanderitem{wraith}{}
+\wanderitem{wyvern}{}
+\wanderitem{yellow_mold}{}
+\wanderitem{yellow_mould}{}
+\wanderitem{zombie}{}
+\wanderitem{zargon}{1}
+\end{wanderingmonsters}
+
+\twocolumn
+
+%
+% License section
+%
+
+\part{Open Game Content}
+\label{ogl}
+
+\begin{ogl}
+\item System Reference Document, Copyright \copyright 2000--2003, Wizards of the Coast, Inc., by Jonathan Tweet, Monte Cook,
+Skip Williams, Rich Baker, Andy Collins, David Noonan, Rich Redman, Bruce R. Cordell, John D. Rateliff, Thomas Reid, James
+Wyatt, based on original material by E. Gary Gygax and Dave Arneson.
+\end{ogl}
+
+%
+% Table of Contents
+%
+
+\newpage
+
+\tableofcontents
+
+\end{document}
diff --git a/macros/latex/contrib/rpg-module/examples/x2.pdf b/macros/latex/contrib/rpg-module/examples/x2.pdf
new file mode 100644
index 0000000000..99884c7eb9
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/x2.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpg-module/examples/x2.tex b/macros/latex/contrib/rpg-module/examples/x2.tex
new file mode 100644
index 0000000000..c0669c2933
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/examples/x2.tex
@@ -0,0 +1,178 @@
+\documentclass[letterpaper,serif]{rpg-module}
+
+\usepackage{parskip} % Add spacing between paras instead of indents
+\usepackage{enumitem} % Control spacing in description list
+
+\begin{document}
+
+\onecolumn
+
+\begin{center}
+Page intentionally left blank.
+\end{center}
+
+\twocolumn
+
+\title{Dungeon Module X2\\
+Castle Amber\\
+(Ch\^{a}teau d'Amberville)}
+
+\subtitle{An Adventure for Character Levels 3--6}
+
+\coverimage{X2_CoverImage.png}
+
+\abstract{Trapped in the mysterious Castle Amber, you find yourselves cut off from the world you know.
+The castle is fraught with peril. Members of the strange Amber family, some insane, some merely deadly,
+lurk around every corner. Somewhere in the castle is the key to your escape, but can you survive long
+enough to find it?
+
+This module contains referee notes, background information, maps, and exploration keys intended for
+use with the D\&D Expert rules. Be sure to look for other D\&D modules from TSR, the Game Wizards!}
+
+\copyrightblock{\vspace{3ex}Distributed to the book trade in the United States by Random House, Inc.
+and in Canada by Random House of Canada. Ltd.
+
+Distributed to the toy and hobby trade by regional distributors.
+
+\copyright 1981 TSR Hobbies, Inc. All Rights Reserved.
+
+DUNGEONS \& DRAGONS and D\&D are registered trademarks owned by TSR Hobbies, Inc.\vspace{1ex}}
+
+\contactblock[p{4.5cm} p{6.0cm} p{7.2cm}]{%
+\vspace{-24pt}
+PRINTED IN U.S.A.
+
+ISBN 0--935696--51--2
+}{\includegraphics[width=4cm]{TSR_Logo.png}}{%
+\vspace{-36pt}
+TSR Hobbies, Inc.
+
+POB 756
+
+Lake Geneva, WI 53147
+\vspace{-11pt}
+\begin{flushright}
+\textbf{\large 9051}
+\end{flushright}
+}
+
+\maketitle
+
+
+
+%% START OF PAGE 1 %%
+
+\showtitle[DUNGEONS \& DRAGONS\registered~Expert Set\\
+Dungeon Module X2\\
+CASTLE AMBER\\
+(CH\^{A}TEAU D'AMBERVILLE)]
+
+Castle Amber is intended for use with the DUNGEONS \& \mbox{DRAGONS} Expert Set, which continues and expands the
+D\&D\registered~Basic rules. This module cannot be used without the D\&D Basic and Expert rules.
+
+\part{Introduction}
+The information in this module is only for the Dungeon Master who
+will guide the players through the adventure. Knowledge of the
+contents of this module will spoil the surprise and excitement for
+players. If you plan to participate in this module as a player, please
+stop reading now.
+
+\section*{Notes for the Dungeon Master}
+Before beginning to play, the DM should read the module thoroughly
+to become familiar with it in detail. The information that is
+boxed is to be read aloud to the players at the appropriate time.
+The material that is not boxed is for the DM's use and should only
+be revealed to the players at the DM's discretion.
+
+This module has been designed for a party of 6 to 10 characters,
+between the 3rd and 6th levels of experience. The total of the
+party's experience levels should be from 26 to 34, with a total of 30
+being best. For example: a party might be made up of a 4th level
+fighter, a 6th level cleric, a 5th level magic-user, a 3rd level thief, a
+5th level dwarf, a 4th level elf and a 3rd level halfling for a total of
+30\,---\,(4\+6\+5\+3\+5\+4\+3 $=$ 30). If the party has a strength of less
+than 26 levels or more than 34, the DM may wish to adjust the
+strength of the monsters in this module\,---\,either making them
+smaller and less numerous or larger and more numerous. Each
+party should have at least 1 magic-user or elf and 1 cleric.
+
+Castle Amber (Ch\^{a}teau D'Amberville) is made up of 9 parts\,---\,some provide wilderness adventures and
+some provide dungeonlike adventures.
+\begin{description}[labelindent=1em,leftmargin=1em]
+\item[Part One] (this section) outlines the scope of the adventure and describes the family of Amber (D'Amberville).
+\item[Part Two] details the West Wing of the Amber family mansion (dungeon adventure).
+\item[Part Three] describes the Indoor Forest in the central part of the mansion, which is built like a greenhouse (wilderness adventure).
+\item[Part Four] is a description of the family Chapel (dungeon adventure).
+\item[Part Five] describes the plan of the East Wing (dungeon adventure).
+\item[Part Six] details the dungeon under the mansion (dungeon adventure).
+\item[Part Seven] is a description of Averoigne, based on a fantasy world created by the author Clark
+Ashton Smith\footnote{Permission to base Part Seven on the Averoigne stories of Clark Ashton Smith was
+graciously granted by CASiana Literary Enterprises, Inc.} (wilderness adventure).
+\item[Part Eight] describes the Tomb of Stephen Amber (La Tombe \'{E}tienne D'Amberville)\,---\,(dungeon adventure).
+\item[Part Nine] gives details on the new monsters introduced in this module.
+\end{description}
+During the adventures the DM should be careful to give the player
+characters a reasonable chance for survival. The emphasis is on
+reasonable. Try to be impartial and fair, but if players persist at
+taking unreasonable risks, or if bravery turns into foolhardiness,
+the DM should make it clear that the characters will die unless they
+act more intelligently. Everyone should cooperate to make the
+adventure fun and exciting.
+
+When describing monster encounters, the DM should not describe
+them only by what they look like. After all, there are four
+other senses as well\,---\,smell, sound, taste and feelings of heat,
+cold, wetness and so forth. The DM should try to vary the approach
+to encounters whenever possible. For example: the party
+might first hear a monster coming before actually meeting the
+monster. Such advance warnings are also a good way to warn a
+party that an encounter might be too difficult to handle. The DM
+should try to avoid letting unplanned wandering monsters ruin the
+balance of the adventure, making it too tough for the party.
+The descriptions of each room give only a minimum of detail. The
+DM should feel free to add any additional details, such as the
+dimensions of the room, so long as this does not alter the challenge
+of the encounter. Additional detail is not necessary, but it may
+strengthen the atmosphere of the adventure.
+
+This module is not designed to be played completely in a single
+session; a number of gaming sessions will be needed to finish it. If
+the party tries to complete the entire module without stopping
+periodically to regain lost hit points and restore spells, they are all
+quite likely to die. The party has an unknown powerful ally looking
+after them. Prince Stephen Amber (described in detail in a later
+section) will send a cloud of amber light to encircle the party at the
+end of a gaming session. This light will protect the party from all
+wandering monsters and provides nourishment. The amber light
+will also restore all lost hit points to wounded characters and allows
+magic-users, elves and clerics a chance to regain their spells. Time
+outside the amber light stops while it continues for those within the
+light. Thus, if characters gain enough experience to reach higher
+experience levels they may train and study between gaming sessions
+and rise in experience levels. Those characters who gain
+experience levels may use the abilities gained at the new level the
+next time they play. In general, the DM will find that a single part of
+the module is equaf to one gaming session.
+
+For the convenience of the DM, whenever a monster or NPC is
+described in the text, the game statistics will be listed in parentheses
+in the following order:
+
+\textbf{Monster Name} (Armor Class; Hit Dice or Class/Level; hit points;
+Number of Attacks per round; Damage per attack; Movement per
+turn (round); Save As: Class/Level; Morale; Alignment; and Abilities
+for NPCs, if necessary.)
+
+Abbreviations which are used are:
+
+Armor Class = \textbf{AC}, Hit Dice = \textbf{HD}, Cleric = \textbf{C}, Dwarf = \textbf{D}, Elf = \textbf{E},
+Fighter = \textbf{F}, Halfling = \textbf{H}, Magic-User = \textbf{M}, Thief = \textbf{T},
+Normal Man = \textbf{NM}; Level = \textbf{\#}, hit points = \textbf{hp}, Number of Attacks = \textbf{\#AT};
+Damage = \textbf{D}, Movement = \textbf{MV}, Save As = \textbf{Save}, Morale = \textbf{ML}; Alignment = \textbf{AL};
+Strength = \textbf{S}, Intelligence = \textbf{I}, Wisdom = \textbf{W}, Dexterity = \textbf{D},
+Constitution = \textbf{C}, Charisma = \textbf{Ch}.
+
+Class/Level is only used for NPCs, while Hit Dice is used for all other monsters. It should be noted
+that movement in a game turn is three times the movement rate per round.
+
+\end{document}
diff --git a/macros/latex/contrib/rpg-module/rpg-module.cls b/macros/latex/contrib/rpg-module/rpg-module.cls
new file mode 100644
index 0000000000..5c75e4f74d
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/rpg-module.cls
@@ -0,0 +1,650 @@
+%% rpg-module.cls
+%
+% A Role-Playing Game Module class for LaTeX
+%
+% Copyright 2016 Michael C. Davis
+%
+% LICENSE FOR THE WORK
+%
+% This work consists of the following files:
+% rpg-module.cls
+% basic-stats.sty
+% basic-stats.def
+% doc/rpg-module.tex
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version. The latest version of this license can be found at:
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX version
+% 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `author-maintained'.
+%
+% The Author and Maintainer of this work is Michael C. Davis
+%
+%
+% LICENSE FOR COMPILED WORKS
+%
+% You may distribute compiled works generated using the work as specified in
+% Clause 3 of the LaTeX Project Public License. If you incorporate Open Gaming
+% Content into the compiled work, you must also comply with the terms of that
+% license.
+%
+%
+% USAGE
+%
+% See the file rpg-module.pdf (source file doc/rpg-module.tex) for documentation.
+% There are a number of worked examples in the examples/ directory.
+%
+% Technical support is provided on Dragonsfoot Forums:
+%
+% http://www.dragonsfoot.org/forums/viewtopic.php?f=87&t=73823
+%
+%
+% KNOWN BUGS
+%
+% 1. Special movement doesn't appear correctly in multi-column New Monster listings
+% if not all monsters share that movement type
+% 2. S&W AC format doesn't handle Lycanthrope ACs very well
+%
+%
+% TO DO
+%
+% 1. Advanced edition stat block options
+% 2. Holmes Basic stat block options
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{rpg-module}[2016/04/25 Role-Playing Game Module document class]
+
+
+
+% Define which stat block systems are recognised. ONE of these environments should be redefined in
+% the system-specific stat block package.
+
+\RequirePackage{comment} % Allow some sections to conditionally appear or not
+\excludecomment{ifbasicstats}
+\excludecomment{ifadvancedstats}
+% \excludecomment{next_system}{...
+
+
+
+% Process class options
+
+\newcounter{papersizeoption}
+\newcounter{fontoption}
+\newcounter{statsoption}
+\newcounter{acoption}
+
+\newif\ifmodule@letterpaper
+\newif\ifmodule@seriffont
+\newif\ifmodule@tightsqueeze
+
+\DeclareOption{letterpaper}{\module@letterpapertrue\stepcounter{papersizeoption}}
+\DeclareOption{a4paper}{\module@letterpaperfalse\stepcounter{papersizeoption}}
+
+\DeclareOption{tightsqueeze}{\module@tightsqueezetrue}
+
+\DeclareOption{serif}{\module@seriffonttrue\stepcounter{fontoption}}
+\DeclareOption{sansserif}{\module@seriffontfalse\stepcounter{fontoption}}
+
+\DeclareOption{basic}{\def\statstyle@module{basic-stats.sty}\stepcounter{statsoption}}
+\DeclareOption{advanced}{\def\statstyle@module{advanced-stats.sty}\stepcounter{statsoption}}
+% \DeclareOption{next_system}{...
+
+% Note: the class does not define a default AC display option. The default is handled by the
+% \ac@module macro which is defined in the style file selected by the previous option.
+
+\DeclareOption{acdesc}{\def\acstyle@module{desc}\stepcounter{acoption}}
+\DeclareOption{acasc}{\def\acstyle@module{asc}\stepcounter{acoption}}
+\DeclareOption{acb1}{\def\acstyle@module{b1}\stepcounter{acoption}}
+\DeclareOption{acsw}{\def\acstyle@module{sw}\stepcounter{acoption}}
+
+\DeclareOption*{
+ \ClassError{rpg-module}{Unrecognised option '\CurrentOption'}{Valid options are:\MessageBreak
+ a4paper,letterpaper,tightsqueeze\MessageBreak serif,sansserif,\MessageBreak basic,advanced,\MessageBreak acdesc,acac,acb1,acsw}
+}
+
+\ExecuteOptions{a4paper} % default paper size is A4
+\ExecuteOptions{sansserif} % default font option is sans serif
+\ExecuteOptions{basic} % default stat block style is basic
+
+\ProcessOptions\relax
+
+\ifcase\thepapersizeoption\or\or\else
+ \ClassError{rpg-module}{a4paper and letterpaper options are mutually exclusive}
+ {The input file contains a statement like:\MessageBreak
+ \protect\documentclass[letterpaper,a4paper]{rpg-module}\MessageBreak
+ You can only select one paper size, either letterpaper or a4paper.\MessageBreak
+ The default is a4paper.}
+\fi
+
+\ifcase\thefontoption\or\or\else
+ \ClassError{rpg-module}{serif and sanserif options are mutually exclusive}
+ {The input file contains a statement like:\MessageBreak
+ \protect\documentclass[serif,sansserif]{rpg-module}.\MessageBreak
+ You can only select one font style, either serif or sans serif.\MessageBreak
+ The default is sans serif.}
+\fi
+
+\ifcase\thestatsoption\or\or\else
+ \ClassError{rpg-module}{you can only select one style}
+ {The input file contains a statement like:
+ \protect\documentclass[basic,advanced]{rpg-module}.
+ You can only select one style for stat blocks.\MessageBreak
+ The recognised styles are basic and advanced.\MessageBreak
+ The default is basic. Advanced will be defined in a future version of the rpg-module class.}
+\fi
+
+\ifcase\theacoption\or\else
+ \ClassError{rpg-module}{you can only select one AC style}
+ {The input file contains a statement like:\MessageBreak
+ \protect\documentclass[acasc,acdesc]{rpg-module}.\MessageBreak
+ You can only select one style for armour class.\MessageBreak
+ The recognised styles are acasc, acdesc, acb1 and acsw.}
+\fi
+
+
+
+% Process paper size options
+
+\setlength\voffset{-1in}
+\setlength\hoffset{-1in}
+
+\ifmodule@letterpaper
+ \PassOptionsToClass{letterpaper}{article}
+ \addtolength\voffset{-17.6mm}
+ \addtolength\hoffset{2.95mm}
+ \newcommand{\ArmourClass}{Armor Class} % Concession to US spelling of Armour
+\else
+ \PassOptionsToClass{a4paper}{article}
+ \PassOptionsToClass{twoside}{article}
+ \newcommand{\ArmourClass}{Armour Class}
+\fi
+
+
+
+% Load the standard LaTeX 'article' document class that module is based on
+
+\LoadClass[twocolumn]{article}
+
+
+
+% Set page margins
+
+\setlength{\oddsidemargin}{0.8cm}
+\setlength{\evensidemargin}{0.8cm}
+
+\setlength{\topmargin}{2.6cm}
+
+\setlength{\textheight}{25.4cm}
+\setlength{\textwidth}{19.4cm}
+
+\setlength{\marginparsep}{0cm}
+\setlength{\marginparwidth}{0cm}
+
+\setlength{\footskip}{0.7cm}
+
+\setlength{\columnsep}{1.15cm}
+
+\pagenumbering{arabic}
+
+\ifmodule@letterpaper
+ \setlength{\headheight}{0cm}
+ \setlength{\headsep}{0cm}
+\else
+ \addtolength{\topmargin}{-\headheight}
+ \addtolength{\topmargin}{-\headsep}
+ \RequirePackage{fancyhdr} % Add headers and footers
+ \fancypagestyle{plain}{%
+ \fancyhf{} % clear all header and footer fields
+ \fancyhead[LO,RE]{\slshape \leftmark}
+ \fancyhead[RO,LE]{\slshape \rightmark}
+ \fancyfoot[C]{\thepage} % except the center
+ \renewcommand{\headrulewidth}{0pt}
+ \renewcommand{\footrulewidth}{0pt}
+ }
+ \pagestyle{plain}
+\fi
+
+
+
+% Float placement options
+% See p.199-200 of Lamport's "LaTeX" book for details and p.105 of "TeX Unbound" for suggested values
+
+\renewcommand{\topfraction}{0.9} % max fraction of floats at top
+\renewcommand{\bottomfraction}{0.8} % max fraction of floats at bottom
+
+% Parameters for TEXT pages (not float pages)
+
+\setcounter{topnumber}{2}
+\setcounter{bottomnumber}{2}
+\setcounter{totalnumber}{4}
+\setcounter{dbltopnumber}{2} % for 2-column pages
+\renewcommand{\dbltopfraction}{0.9} % fit big float above 2-column text
+\renewcommand{\textfraction}{0.07} % allow minimal text
+
+% Parameters for FLOAT pages (not text pages)
+%
+% Note: \floatpagefraction must be less than \topfraction above
+
+\renewcommand{\floatpagefraction}{0.7} % require fuller float pages
+\renewcommand{\dblfloatpagefraction}{0.7} % require fuller float pages
+
+
+
+% Process font options
+
+\RequirePackage[T1]{fontenc} % Use T1 (8-bit) font encoding
+\RequirePackage{lmodern} % Use Latin Modern instead of Computer Modern for symbols etc.
+\RequirePackage{xfrac} % Get a good-looking 1/2 symbol
+
+\newcommand\half{\sfrac{1}{2}} % Get a good-looking 1/2 symbol
+
+\ifmodule@seriffont
+ \IfFileExists{souvenir.sty}{ % If ITC Souvenir font is installed in this LaTeX distribution
+ \RequirePackage{souvenir} % Use ITC Souvenir as serifed font
+ \renewcommand{\bfdefault}{d} % Use demi-bold instead of bold
+ \renewcommand*\copyright{{\usefont{T1}{lmr}{m}{n}\textcopyright}} % Get a good-looking copyright (C) symbol
+ \newcommand*\registered{{\usefont{T1}{lmr}{m}{n}\textregistered}} % Registered trademark (R) symbol
+ \renewcommand\half{{\usefont{T1}{lmr}{m}{n}\sfrac{1}{2}}} % Redefine font for 1/2 symbol
+ }{
+ \ClassWarning{rpg-module}{%
+ ITC Souvenir not detected, substituting Bookman as default serifed font.}
+ \RequirePackage{bookman} % Use Bookman as serifed font
+ }
+ \renewcommand*\familydefault{\rmdefault} % Default to serifed font
+\else
+ \RequirePackage{avant} % Use URW Gothic as default sans-serif font (similar to ITC Avant Garde Gothic)
+ \renewcommand*\familydefault{\sfdefault} % Default to sans-serif font
+\fi
+
+\renewcommand{\tiny} {\fontsize {4pt} {4.8pt}\selectfont}
+\renewcommand{\scriptsize} {\fontsize {5pt} {6.0pt}\selectfont}
+\renewcommand{\footnotesize}{\fontsize {7pt} {8.4pt}\selectfont}
+\renewcommand{\small} {\fontsize {8pt} {9.6pt}\selectfont}
+\renewcommand{\normalsize} {\fontsize {9pt}{10.8pt}\selectfont}
+\renewcommand{\large} {\fontsize{10pt}{12.0pt}\selectfont}
+\renewcommand{\Large} {\fontsize{11pt}{13.2pt}\selectfont}
+\renewcommand{\LARGE} {\fontsize{13pt}{15.6pt}\selectfont}
+\renewcommand{\huge} {\fontsize{16pt}{19.2pt}\selectfont}
+\renewcommand{\Huge} {\fontsize{17.28pt}{20.74pt}\selectfont}
+
+
+
+% Load the rest of the required packages
+
+\RequirePackage[pass,paperwidth=\paperwidth,paperheight=\paperheight]{geometry} % Page size
+\RequirePackage[explicit,newparttoc]{titlesec} % Redefine section headings
+\RequirePackage{titletoc} % Redefine table of contents
+\RequirePackage{array} % Format table headings
+\RequirePackage{booktabs} % Underline table headings
+\RequirePackage{caption} % Allow non-numbered figure and table captions
+\RequirePackage{framed} % Boxed text
+\RequirePackage{graphicx} % Allow images and text across two columns
+\RequirePackage{dblfloatfix} % Allow positioning of figure* at bottom of page
+\RequirePackage{xstring} % Manipulate strings
+
+% Hyperlinks
+
+\RequirePackage[linktocpage]{hyperref} % Allow hyperlinks, only page numbers in TOC are clickable
+\RequirePackage[dvipsnames]{xcolor} % Pre-defined colour names
+\hypersetup{colorlinks=true,
+ urlcolor=MidnightBlue, % Colour for external links
+ linkcolor=MidnightBlue, % Colour for internal links (including Table of Contents)
+ citecolor=MidnightBlue} % Colour for references
+
+% Key-value pairs, used for stat blocks
+
+\RequirePackage{pgfkeys}
+\input{pgfutil-common}
+\input{pgfmath.code}
+
+% Define a narrow breaking space
+
+\newcommand*{\thinspacebrk}{\hskip0.16667em\relax}
+
+% Tightsqueeze option for reduced spacing
+
+\ifmodule@tightsqueeze
+ \titlespacing*{\part}{0pt}{0pt}{0pt}
+ \titlespacing*{\section}{0pt}{0.5ex plus .2ex}{0.5ex plus .2ex}
+ \titlespacing*{\subsection}{0pt}{0.5ex plus .2ex}{0.5ex plus .2ex}
+ \FrameSep5pt
+ \renewcommand{\arraystretch}{1}
+\else
+ \renewcommand{\arraystretch}{1.2} % Default: increase the table row spacing a little
+\fi
+
+% Footnote options
+
+\renewcommand*{\thefootnote}{\fnsymbol{footnote}} % Use footnote symbols instead of numbers
+\renewcommand\@makefntext[1]{\leftskip=0.5em\hskip-0.5em\makebox[0.5em]{\@makefnmark}#1} % Footnote indentation
+
+% The freestyle (system-independent) stat block
+%
+% Other stat-block styles depend on the RPG system option chosen and are defined in the appropriate .sty file
+
+\newenvironment{statblockfreestyle}{\begin{list}{}{\leftmargin=1em\rightmargin=1em}\item}{\end{list}}
+
+% Define monsters
+
+\newcounter{currentstat} % Counter for setting up key-value pairs
+
+\newcommand{\monster}[4][default]{
+ \pgfkeys{/#2/SingleName/.initial = {#3}}
+ \ifnum\pdfstrcmp{#1}{default}=\z@
+ \IfEndWith{#3}{y}
+ {\pgfkeys{/#2/PluralName/.initial = \StrGobbleRight{#3}{1}ies}} % Plural names ending in -y change to -ies
+ {
+ \IfEndWith{#3}{s}
+ {\pgfkeys{/#2/PluralName/.initial = #3es}} % Plural names ending in -s change to -ses
+ {\pgfkeys{/#2/PluralName/.initial = #3s}} % Default case, plurals where we add -s
+ }
+ \else
+ \pgfkeys{/#2/PluralName/.initial = #1} % Override for irregular plurals
+ \fi
+ \setcounter{currentstat}{0}
+ \def\currentmonster{#2}
+ \scan@stats#4|\relax|
+}
+
+% Load system-specific stat blocks
+
+\InputIfFileExists{\statstyle@module}{%
+ \ClassInfo{rpg-module}{Loading monster stats from \statstyle@module}
+}{%
+ \ClassWarning{rpg-module}{Monster stats style \statstyle@module\space not found,\MessageBreak
+ defaulting to basic-stats.sty}
+ \input{basic-stats.sty}
+}
+
+% Title Page
+
+\renewcommand\maketitle{\hypersetup{pageanchor=false}% No internal links to title page allowed
+\begin{titlepage}
+\vspace*{\fill}
+\begin{center}
+\Huge \textbf{\@title} \par
+\@author
+\@subtitle
+\@coverimg
+\end{center}
+\@abstract
+\@copyright
+\@contact
+\vfill
+\end{titlepage}
+\hypersetup{pageanchor=true}
+\global\let\maketitle\relax
+\global\let\@author\@empty
+\global\let\@subtitle\@empty
+\global\let\@coverimg\@empty
+\global\let\@abstract\@empty
+\global\let\@copyright\@empty
+\global\let\@contact\@empty
+\global\let\title\relax
+\global\let\author\relax
+}
+
+\newcommand\showtitle[1][\@title]{\begin{center}
+\LARGE\textbf{#1}
+\end{center}
+\let\if@afterindentfalse}
+
+\renewcommand\@author{\relax}
+\renewcommand{\author}[1]{\gdef\@author{\vskip 0.5em\LARGE \textbf{by #1}}}
+
+\newcommand\@subtitle{\relax}
+\newcommand\@coverimg{\relax}
+\newcommand\@abstract{\relax}
+\newcommand\@copyright{\relax}
+\newcommand\@contact{\relax}
+
+\newcommand{\subtitle}[1]{\gdef\@subtitle{\vskip 0.5em \LARGE \textbf{\MakeUppercase{#1}}}}
+\newcommand{\coverimage}[1]{\gdef\@coverimg{\vskip 1em \includegraphics[width=\textwidth]{#1} \par}}
+\renewcommand{\abstract}[1]{\gdef\@abstract{\vskip 0.5em #1 \par}}
+
+\newcommand{\copyrightblock}[1]{\gdef\@copyright{\vskip 0.5em
+\begin{quote}
+\centering
+#1
+\end{quote}}}
+
+\newcommand{\contactblock}[4][p{5.9cm} p{5.9cm} p{5.9cm}]{\gdef\@contact{\vskip 0.5em
+\begin{tabular}{#1}
+{#2} & {#3} & {#4}
+\end{tabular}
+}}
+
+
+
+% Running heads (used on A4 paper size only)
+
+\newcommand\titlerunning[1]{%
+ \gdef\runningtitle{\MakeUppercase{#1}}
+}
+
+\ifmodule@letterpaper\else
+ \renewcommand{\partmark}[1]{\markright{\MakeUppercase{#1}}{}}
+ \renewcommand{\sectionmark}[1]{}
+ \renewcommand{\subsectionmark}[1]{}
+ \renewcommand{\leftmark}{\runningtitle}
+ \titlerunning{\@title}
+\fi
+
+
+% Headings
+
+\renewcommand\thepart{\arabic{part}}
+\renewcommand\thesection{}
+\renewcommand\thesubsection{\arabic{subsection}}
+\renewcommand\thesubsubsection{\arabic{subsection}\alph{subsubsection}}
+
+\titleformat{\part}[block]
+{\LARGE\bfseries\filcenter}
+{\LARGE PART \thepart:}{0.5em}{\MakeUppercase{#1}}
+
+\titleformat{\section}[hang]
+{\Large\bfseries\filright}
+{}{0em}{\MakeUppercase{#1}}
+
+\titleformat{name=\section,numberless}[block] % how to handle \section*
+{\Large\bfseries\filcenter}
+{}{0em}{#1\phantomsection\addcontentsline{toc}{section}{#1}}
+
+\titleformat{\subsection}[hang]
+{\normalfont\bfseries\filright}
+{\thesubsection.}{0.5em}{\MakeUppercase{#1}}
+
+\titleformat{\subsubsection}[hang] % \subsubsection is indentical to \subsection except for the numbering
+{\normalfont\bfseries\filright}
+{\thesubsubsection.}{0.5em}{\MakeUppercase{#1}}
+
+% Default section spacing, for reference
+%
+%\titlespacing*{\chapter} {0pt}{50pt}{40pt}
+%\titlespacing*{\section} {0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
+%\titlespacing*{\subsection} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
+%\titlespacing*{\subsubsection}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
+%\titlespacing*{\paragraph} {0pt}{3.25ex plus 1ex minus .2ex}{1em}
+%\titlespacing*{\subparagraph} {\parindent}{3.25ex plus 1ex minus .2ex}{1em}
+
+% Table of Contents
+
+\renewcommand\tableofcontents{%
+ \noindent\Large\textbf{\MakeUppercase\contentsname}\vspace{1em}\@starttoc{toc}
+}
+
+
+\addtocontents{toc}{\protect\setcounter{tocdepth}{1}}
+\titlecontents{part}[0em]{\normalsize\bfseries}{PART \thecontentslabel : \MakeUppercase}{}{\quad\thecontentspage}[\vspace{1.5ex plus .2ex}]
+\titlecontents*{section}[0em]{\normalsize}{}{}{~\thecontentspage}[\unskip, ][.\vspace{1.5ex plus .2ex}]
+\titlecontents*{subsection}[0em]{\normalsize}{}{}{~\thecontentspage}[\unskip, ][.\vspace{1.5ex plus .2ex}]
+\titlecontents*{subsubsection}[0em]{\normalsize}{}{}{~\thecontentspage}[\unskip, ][.\vspace{1.5ex plus .2ex}]
+
+
+
+% Boxed text
+
+\newenvironment{boxtext}{%
+\if@nobreak
+ \vspace{-\topsep}
+\fi
+\begin{framed}\@afterheading}{\end{framed}\aftergroup\@afterindentfalse\aftergroup\@afterheading}
+
+
+
+% Single-column text
+
+\newcommand\onecolumninline[1]{%
+\newlength{\tmpparindent}
+\newlength{\tmpparskip}
+\setlength{\tmpparindent}{\parindent}
+\setlength{\tmpparskip}{\parskip}
+\twocolumn[{
+\setlength{\parindent}{\tmpparindent}
+\setlength{\parskip}{\tmpparskip}
+\fussy
+#1
+\vspace{2ex}
+}]
+}
+
+\newenvironment{onecolumnfloat}[1][t]{%
+\let\@floatboxreset\relax%
+\let\@parboxrestore\relax%
+\begin{table*}[#1]\unskip}{\end{table*}}
+
+
+
+% Tables
+
+\newcolumntype{b}{>{\bfseries}c} % New column type 'b' for bold, centred headings
+\newcounter{numcols@module} % Counter to keep track of how many columns are in the table
+
+% Underline table headers
+
+\newtoks\module@tableul
+\newcommand{\tableul}[1]{%
+ \noalign{%
+ \global\module@tableul={}%
+ \toks@={\cmidrule(l{\tabcolsep}r{\tabcolsep})}%
+ \count@=\z@
+ \loop\ifnum\count@<#1\relax
+ \advance\count@\@ne
+ \edef\module@temp{\the\toks@{\the\count@-\the\count@}}%
+ \global\module@tableul\expandafter{\the\expandafter\module@tableul\module@temp}%
+ \repeat
+ }%
+ \the\module@tableul
+}
+
+% Typeset the table heading
+% Takes a column type as an optional argument (defaults to 'c' for centred text)
+
+\newcommand\tableheader[2][c]{{%
+ \edef\lbracetoken{\string{}
+ \edef\rbracetoken{\string}}
+ \StrCount{#2}{&}[\numamps]\global\setcounter{numcols@module}{\numamps}\stepcounter{numcols@module}
+ \newcommand\source{\string\multicolumn\lbracetoken 1\rbracetoken\lbracetoken#1\rbracetoken\lbracetoken#2\rbracetoken}
+ \newcommand\replace{\rbracetoken&\string\multicolumn\lbracetoken 1\rbracetoken\lbracetoken#1\rbracetoken\lbracetoken}
+ \StrSubstitute{\source}{ & }{\replace}[\tmptblhdr]
+ \StrExpand{\tmptblhdr}{\tmptblhdrexpand}
+ \tokenize{\tmptbltok}{\tmptblhdr}
+ \global\let\tableheader@module\tmptbltok
+}\\[-2ex] % hack to get around the fact that it's not allowed to have non-expandable text in the same cell as \multicolumn
+\tableheader@module\\
+\tableul{\thenumcols@module}
+}
+
+
+
+% Copyright and license macros
+
+\newcommand{\modulecopyright}{%
+The \LaTeX~rpg-module class is copyright \copyright 2016 Michael Davis and is distributed under the conditions of the
+\href{http://www.latex-project.org/lppl.txt}{LaTeX Project Public License}, either version 1.3 or (at your option)
+any later version. Compiled Works generated using the rpg-module class can be distributed as specified in Clause 3 of the license.}
+
+\newenvironment{ogl}{%
+\footnotesize
+\subsection*{OPEN GAME LICENSE Version 1.0a}
+The following text is the property of Wizards of the Coast, Inc. and is Copyright 2000 Wizards of the Coast, Inc (``Wizards''). All Rights Reserved.
+\begin{enumerate}
+\item Definitions: (a) ``Contributors'' means the copyright and/or trademark owners who have contributed Open Game Content; (b) ``Derivative Material''
+means copyrighted material including derivative works and translations (including into other computer languages), potation, modification, correction,
+addition, extension, upgrade, improvement, compilation, abridgment or other form in which an existing work may be recast, transformed or adapted; (c)
+``Distribute'' means to reproduce, license, rent, lease, sell, broadcast, publicly display, transmit or otherwise distribute; (d) ``Open Game Content''
+means the game mechanic and includes the methods, procedures, processes and routines to the extent such content does not embody the Product Identity
+and is an enhancement over the prior art and any additional content clearly identified as Open Game Content by the Contributor, and means any work
+covered by this License, including translations and derivative works under copyright law, but specifically excludes Product Identity. (e) ``Product
+Identity'' means product and product line names, logos and identifying marks including trade dress; artifacts; creatures characters; stories,
+storylines, plots, thematic elements, dialogue, incidents, language, artwork, symbols, designs, depictions, likenesses, formats, poses, concepts,
+themes and graphic, photographic and other visual or audio representations; names and descriptions of characters, spells, enchantments, personalities,
+teams, personas, likenesses and special abilities; places, locations, environments, creatures, equipment, magical or supernatural abilities or effects,
+logos, symbols, or graphic designs; and any other trademark or registered trademark clearly identified as Product identity by the owner of the Product
+Identity, and which specifically excludes the Open Game Content; (f) ``Trademark'' means the logos, names, mark, sign, motto, designs that are used by
+a Contributor to identify itself or its products or the associated products contributed to the Open Game License by the Contributor (g) ``Use'',
+``Used'' or ``Using'' means to use, Distribute, copy, edit, format, modify, translate and otherwise create Derivative Material of Open Game Content.
+(h) ``You'' or ``Your'' means the licensee in terms of this agreement.
+
+\item The License: This License applies to any Open Game Content that contains a notice indicating that the Open Game Content may only be Used under and
+in terms of this License. You must affix such a notice to any Open Game Content that you Use. No terms may be added to or subtracted from this License
+except as described by the License itself. No other terms or conditions may be applied to any Open Game Content distributed using this License.
+
+\item Offer and Acceptance: By Using the Open Game Content You indicate Your acceptance of the terms of this License.
+
+\item Grant and Consideration: In consideration for agreeing to use this License, the Contributors grant You a perpetual, worldwide, royalty-free,
+non-exclusive license with the exact terms of this License to Use, the Open Game Content.
+
+\item Representation of Authority to Contribute: If You are contributing original material as Open Game Content, You represent that Your Contributions are
+Your original creation and/or You have sufficient rights to grant the rights conveyed by this License.
+
+\item Notice of License Copyright: You must update the COPYRIGHT NOTICE portion of this License to include the exact text of the COPYRIGHT NOTICE of any
+Open Game Content You are copying, modifying or distributing, and You must add the title, the copyright date, and the copyright holder's name to the
+COPYRIGHT NOTICE of any original Open Game Content you Distribute.
+
+\item Use of Product Identity: You agree not to Use any Product Identity, including as an indication as to compatibility, except as expressly licensed in
+another, independent Agreement with the owner of each element of that Product Identity. You agree not to indicate compatibility or co-adaptability with any
+Trademark or Registered Trademark in conjunction with a work containing Open Game Content except as expressly licensed in another, independent Agreement with
+the owner of such Trademark or Registered Trademark. The use of any Product Identity in Open Game Content does not constitute a challenge to the ownership of
+that Product Identity. The owner of any Product Identity used in Open Game Content shall retain all rights, title and interest in and to that Product Identity.
+
+\item Identification: If you distribute Open Game Content You must clearly indicate which portions of the work that you are distributing are Open Game Content.
+
+\item Updating the License: Wizards or its designated Agents may publish updated versions of this License. You may use any authorized version of this License
+to copy, modify and distribute any Open Game Content originally distributed under any version of this License.
+
+\item Copy of this License: You MUST include a copy of this License with every copy of the Open Game Content You Distribute.
+
+\item Use of Contributor Credits: You may not market or advertise the Open Game Content using the name of any Contributor unless You have written permission
+from the Contributor to do so.
+
+\item Inability to Comply: If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Open Game Content
+due to statute, judicial order, or governmental regulation then You may not Use any Open Game Material so affected.
+
+\item Termination: This License will terminate automatically if You fail to comply with all terms herein and fail to cure such breach within 30 days of becoming
+aware of the breach. All sublicenses shall survive the termination of this License.
+
+\item Reformation: If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it
+enforceable.
+
+\item COPYRIGHT NOTICE
+\end{enumerate}
+\begin{list}{}{}
+\item Open Game License v 1.0 Copyright 2000, Wizards of the Coast, Inc.
+}{\end{list}}
+
+\newenvironment{productidentity}{%
+\footnotesize
+\subsection*{Designation of Product Identity}
+\begin{list}{}{\leftmargin=0cm}
+}{\end{list}}
+
+\newenvironment{opengamecontent}{%
+\footnotesize
+\subsection*{Designation of Open Game Content}
+\begin{list}{}{\leftmargin=0cm}
+}{\end{list}}
+
diff --git a/macros/latex/contrib/rpg-module/rpg-module.pdf b/macros/latex/contrib/rpg-module/rpg-module.pdf
new file mode 100644
index 0000000000..69d90ae2d2
--- /dev/null
+++ b/macros/latex/contrib/rpg-module/rpg-module.pdf
Binary files differ