In the previous post, We left a table representing a Vargouille monster like this:

Monster definition basic and attackless
And we want it more threatening. In this post I will add the different attacks, base stats, languages and maybe equipment. All are optional, it is decoration to our dangerous monster
Design
As already described in the original monster post, apart from the ddmonster
environment there is a lot of commands to be used for: Section, attacks, powers, stats etc..
== My ideal design
D&D is a complex game with various definitions of Actions, Effects, Powers etc. But everything boils down to:
- Name
- type (daily, encounter, at will)
- Attack roll Throw a dice
- What if Hit
And then there are optional parts of the attack like:
- What if Miss
- Permanent effects
My ideal design would be \ddmAction
with named parameters: attack, hit, miss. But with trial and error (and a lot of reading) I learnt that ifthenelse and others inside tables is very troublesome, I’ll avoid these multiple problems.
== My current design
Actions
Instead of a single \ddmAction
command. A range of commands is used to represent all the possible outcomes. If there’s a missing outcome I will just add the new command.
The following table presents all the commands, the number of parameters and a description. Some of the commands are almost the same, changing just the predefined text that will appear.
Command | #P | Description |
---|---|---|
\ddmActionS | 3 | “Simple” action. name, type, definition |
\ddmActionAH | 4 | Attack and hit name, type, attack, hit |
\ddmActionAHM | 5 | Attack Hit and Miss name, type, attack, hit, miss |
\ddmEffect | 3 | Monster Trait name, type, effect definition |
\ddmTrigger | 4 | Triggered Action name, type, Trigger, effect definition |
\ddmAura | 3 | Monster Aura name, Aura distance, Aura definition |
\ddmPower | 2 | Monster special power name, power definition it has no type |
Sections
The Monster sections are just multicolumns, with different background color. Just use a command with one parameter.
Command | \ddmStandardSection |
---|
\ddmMovementSection |
\ddmMinorSection |
\ddmTraitsSection |
\ddmExtraSection |
Stats
The monster has 6 ability values (Strength, Constitution, Dexterity, Intelligence, Wisdom and Charisma) with 6 modifiers. I will calculate the modifiers with fp. The values will be presented with a table within a table.
Instead of using named parameters I will keep unnamed ordered parameters.
Command | #P | Description |
---|---|---|
\ddmStats | 8 | Monster stats and modifiers Str., Dex., Wis., Con., Int., Cha., level, extra habilities |
Others
Languages, Alignments and Equipment. Just simple table rows.
Command | #P | Description |
---|---|---|
\ddmAlignLang | 2 | Monster alignment and language |
\ddmEquip | 1 | Equipment list |
Implementing
Actions
All the actions are implemented the same way. I will write and explain here one of those, the \ddmActionAHM
.
%An action with name-type. Attack and hit and miss \newcommand{\ddmActionAHM}[5]{ \midrule \rowcolor[gray]{0.8} {#1} & {#2} \\ \midrule \multicolumn{2}{p{0.9\linewidth}}{Attack: #3} \\ \multicolumn{2}{p{0.9\linewidth}}{Hit: #4} \\ \multicolumn{2}{p{0.9\linewidth}}{Miss: #5} \\ }
As a convention a new action has to define an upper rule \midrule
if it expects to be separed. No bottom rule is issued (to avoid double rules).
The action writes a first row with two columns containing the two first parameters ({#1} and {#2}). That is the Action Name and the action type.
After that, three multicolumns write the attack, the hit and the miss. This is very easy, there is nothing weird in the code. Just note how I force the multicolum to a 90% of the width, If I don’t define that, long lines will be split in multiple lines until reaching the end of the paper.
Sections and Others
Those two follow exactly the same style as the defined action. If you want the full code, just check my github.
Stats
The stats provide a table with the monster abilities, plus its modifier.
The modifier is something related to D&D 4E, and you can find the values googling “d&d 4e ability modifiers“.
Value | Modifier |
---|---|
00-01 | -5 |
02-03 | -4 |
04-05 | -3 |
06-07 | -2 |
08-09 | -1 |
10-11 | 0 |
11-12 | 1 |
… | … |
34-35 | 12 |
You see the pattern right?
This is the basic modifier. Then, by the rules, I have to add half the level (rounded down)
Unfortunately, the package fp does not have a floor function. It provides \round
and trunc
. The round
function is what we will use with a little trick.
I know that all the fractions will end in something like X.5. To get the floor value, I just have to substract a little to get X.4, and then round.
\newcommand{\abilityeval}[2]{ %Get the half value rounded down \FPeval{\hab}{round(#1/2 -0.1,0)} \FPeval{\hlvl}{round(#2/2 -0.1,0)} %Calculate \FPeval{\mod}{ trunc( -5 + \hab + \hlvl ,0)} \mod }
This is how I would like to do it. But apparently FPeval is inserting horizontal spaces. So after three evals the result is not nice. I join everything into a single line, avoiding multiple horizontal spaces.
\newcommand{\abilityeval}[2]{ \FPeval{\abmod}{trunc(-5 + round(#1/2 -0.1,0) + round(#2/2 -0.1,0) ,0)} \mod }
With that small command my \ddmStats
is easy to perform
% Print a table of Ability values and modifiers according % to ability values and level. % Additionally add skills if defined % Str, Dex, Wis, Con, Int, Cha, Level, Extra skills \newcommand{\ddmStats}[8]{ \multicolumn{2}{p{0.9\linewidth}}{ \textbf{skills:} {#8} } \\ \multicolumn{2}{l}{ \begin{tabular}{l|l|l} \textbf{Str} #1 \emph{\abilityeval{#1}{#7}} & \textbf{Dex} #2 \emph{\abilityeval{#2}{#7}} & \textbf{Wis} #3 \emph{\abilityeval{#3}{#7}} \\ \textbf{Con} #4 \emph{\abilityeval{#4}{#7}} & \textbf{Int} #5 \emph{\abilityeval{#5}{#7}} & \textbf{Cha} #6 \emph{\abilityeval{#6}{#7}} \\ \end{tabular} }\\ }
Because this is something so specific I also provide \ddmStatsNoMod
, that will take one less parameter (level) and won’t compute the modifiers.
Result
We finally have all the ingredients to write the complete Vargouille monster.
\begin{ddmonster} [ name = Vargouille, role = Controller,lvl=2, keywords = small immortal Magical Beast,xp=125, HP=38,initiative=2, AC=16,Fort=15,Refl=14,Will=14,perception=7, speed=2 (volar 6),vision=Darkvision, %resist=10 fire, %save=0, %AP=0, ] \ddmStandardSection \ddmActionAH{Bite}{At-Will} {+7 vs AC (1 creature)} {1d6 +4 damage. Ongoing poison damage 5 (save ends).} %\ddmActionAH{Shriek (fear)}{Recharge \ding{196},\ding{197}} \ddmActionAH{Shriek (fear)}{Recharge 5,6} {Close Blast 3: +5 vs Will} {1d6 damage. The target is immobilized until the end of its next turn.} \ddmActionAH{Kiss}{At-Will} {+7 vs AC. Against an immobilized target.} {2d8 +5 damage. And ongoing 5 posion damage (save ends).} \ddmAlignLang{Evil}{Supernal} \ddmStats{10}{13}{12}{14}{5}{8}{2}{Stealth +7} \end{ddmonster}
Conclusion
Wuff, that was a lot of work. But now we can write a monster in a somewhat easy and consistent way. You can even create your own database of monsters to include :-D. At least it has been useful for me when preparing a couple of adventures.
There are still some things that I find unpleasant to work with.
The Table will have the width of the line. I am working following the style of A4 pages with two columns found in D&D 3e adventures. But if you want a full page with single column, well, it will be ugly.
If you are reading so far, maybe you realized the commented code \ding{196}
, this is pifont package, to print nice characters for “recharge” powers. I would like to change those characters to something more similar to dice.
TrueType font files with the attack icons of Dungeons and Dragons 4E exist. I would like to implement that in my monster.
Extra
Oh, ! I love Poirot!
This error message was generated by an \errmessage
command, so I can’t give any explicit help.
Pretend that you’re Hercule Poirot: Examine all clues,
and deduce the truth by order and method.
– running pdflatex
References
xkeyval documentation ⇒GO
xkeyval package at CTAN ⇒GO
D&D 4E conversion wikia ⇒GO
ifthenelse ⇒GO
fp ⇒GO
Pingback: The monster environment | Castells